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スコープの属性として保管される。これで初期化処理終了。