Employee Management4-(2)

/employee/employeeList.htmlはemployeeSearch.htmlへ入力された条件に該当するレコードをリスト表示する画面。ボチボチ見ていくことにする。最初は初期化メソッド。

<html xmlns:m="http://www.seasar.org/maya"
    m:action="#{employeeListInitAction.initialize}"
    m:extends="/WEB-INF/layout/layout.html">

このemployeeListInitActionはemployee.diconでexamples.jsf.action.impl.EmployeeListInitActionImplクラスのインスタンスで、requestスコープと宣言されている。

>xml||

<component name="employeeListInitAction" class="examples.jsf.action.impl.EmployeeListInitActionImpl" instance="request">

<aspect>actionInterceptorChain</aspect>

</component>

||<

定義されているプロパティは次の通り。

public class EmployeeListInitActionImpl implements EmployeeListInitAction {
    private EmployeeSearchDto employeeSearchDto;
    private EmployeeLogic employeeLogic;
    private List employeeDtoList;
                    :
}

まずemployeeSearchDto。これは前画面employeeSearch.htmlに入力された内容を保持するもので、sessionスコープで管理されている(employee.dicon参照)。それがsetterメソッドsetEmployeeSearchDto()経由でここにセットされる。employeeLogicにはテーブルEMPを操作するインタフェースEmployeeLogicを実装したクラスEmployeeLogicImpのインスタンスがセットされる。employeeDtoListは、initialize()の中でセットされる。

そのinitialize()だが次のようになっている。

public String initialize() {
    employeeDtoList = employeeLogic.searchEmployeeDtoList(employeeSearchDto);
    return null;
}

EmployeeLogicImp#searchEmployeeDtoList()もEmployeeDtoDaoの同名メソッドを呼び出すだけ。

public List searchEmployeeDtoList(EmployeeSearchDto dto) {
    return employeeDtoDao.searchEmployeeDtoList(dto);
}

employeeDtoDaoもテーブルEMPに関連付けられていて、searchEmployeeDtoList()は以下のようになっている。

public String searchEmployeeDtoList_ARGS = "dto";
public List searchEmployeeDtoList(EmployeeSearchDto dto);

この結果実行されるSQLはexamples/jsf/dao/Employee_searchEmployeeDtoList.sqlに定義されたものになる。以下がその内容。基本的にはEmployee_getSearchCount.sql同様、前画面(employeeSearch.html)でValueBindingされた内容を使いながらSELECT文を組み立てている。

select empno,ename,job,mgr,hiredate,
sal,comm,e.deptno,d.dname
from emp e left outer join dept d on e.deptno = d.deptno
/*BEGIN*/
where
/*IF dto.empno != null*/and empno = /*dto.empno*/7788/*END*/
/*IF dto.ename != null*/and ename = /*dto.ename*/'SCOTT'/*END*/
/*IF dto.job != null*/and job = /*dto.job*/'ANALYST'/*END*/
/*IF dto.mgr != null*/and mgr = /*dto.mgr*/7566/*END*/
/*IF dto.fromHiredate != null*/and hiredate >= /*dto.fromHiredate*/'1982-12-01'/*END*/
/*IF dto.toHiredate != null*/and hiredate <= /*dto.toHiredate*/'1982-12-31'/*END*/
/*IF dto.fromSal != null*/and sal >= /*dto.fromSal*/1000/*END*/
/*IF dto.toSal != null*/and sal <= /*dto.toSal*/4000/*END*/
/*IF dto.deptno != null*/and deptno = /*dto.deptno*/20/*END*/
/*END*/

この結果がemployeeDtoListにセットされる。そのemployeeDtoListはgetterメソッドとしてgetEmployeeDtoListがあるので、このプロパティが自動的にrequestスコープの属性として保管される。これで初期化処理終了。