ActionInterceptor
S2JSFではボタンやリンクをクリックしたときに呼び出されるActionクラスに対して、入力された値を格納するDTO(StrutsでいうActionForm)やリクエストのパラメータが自動DIされます。
また、アクションクラスのプロパティが自動的にリクエストにセットされます。
例えば、従業員の検索条件を入力する画面と検索結果を一覧表示する画面があったとします。
- 入力された検索条件を受け取るEmployeeSearchDto
- 検索ボタンをクリックしたときに呼び出されるActionのインターフェースEmployeeSearchAction
EmployeeSearchAction
public interface EmployeeSearchAction {
public String searchEmployees();
}
EmployeeSearchActionImpl
setterメソッドが定義されていれば、プロパティ名で、リクエストのパラメータ、リクエストの属性、セッションの属性、S2Containerを検索し、見つかったコンポーネントをセットします。
public class EmployeeSearchActionImpl
implements EmployeeSearchAction {private EmployeeSearchDto employeeSearchDto;//setterのみ
private List employees;//getterのみ
private EmployeeLogic employeeLogic;//setterのみpublic String searchEmployees() {
employees = employeeLogic.searchEmployees(employeeSearchDto);
return "employeeList";
}
}
getterメソッドが定義されていれば、プロパティ名でリクエストの属性にセットします。metaタグを使って、セッションにセットすることも出来ます。
この自動DI、変数のExportを行っているのが、ActionInterceptorです。コンポーネントの定義は次のようになります。
Actionクラスのinstance属性は、requestにします。requestの内容がDIされるためです。
<component name="employeeSearchAction"
class="examples.jsf.EmployeeSearchActionImpl"
instance="request">
jsf.actionInterceptor
<property name="employees">
<meta name="s2jsf.export.session"/>
</property>
リクエストやセッションに依存せずに、リクエストやセッションの変数を自在に扱うことが出来ます。