ひがやすを技術ブログ

電通国際情報サービスのプログラマ

ActionInterceptor

S2JSFではボタンやリンクをクリックしたときに呼び出されるActionクラスに対して、入力された値を格納するDTO(StrutsでいうActionForm)やリクエストのパラメータが自動DIされます。
また、アクションクラスのプロパティが自動的にリクエストにセットされます。
例えば、従業員の検索条件を入力する画面と検索結果を一覧表示する画面があったとします。

  • 入力された検索条件を受け取るEmployeeSearchDto
  • 検索ボタンをクリックしたときに呼び出されるActionのインターフェースEmployeeSearchAction

EmployeeSearchAction


public interface EmployeeSearchAction {
public String searchEmployees();
}

EmployeeSearchActionImpl


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";
}
}

setterメソッドが定義されていれば、プロパティ名で、リクエストのパラメータ、リクエストの属性、セッションの属性、S2Containerを検索し、見つかったコンポーネントをセットします。
getterメソッドが定義されていれば、プロパティ名でリクエストの属性にセットします。metaタグを使って、セッションにセットすることも出来ます。
この自動DI、変数のExportを行っているのが、ActionInterceptorです。コンポーネントの定義は次のようになります。


<component name="employeeSearchAction"
class="examples.jsf.EmployeeSearchActionImpl"
instance="request">
jsf.actionInterceptor
<property name="employees">
<meta name="s2jsf.export.session"/>
</property>
Actionクラスのinstance属性は、requestにします。requestの内容がDIされるためです。
リクエストやセッションに依存せずに、リクエストやセッションの変数を自在に扱うことが出来ます。