Struts2 - interceptor
Struts2では、actionメソッド前後の処理(interceptor)を定義できる。
・interceptor定義関連要素
- <interceptors..> : rootタグ
- <interceptor..> : interceptor定義
- <interceptor-stack..> : interceptorのstack定義
- <interceptor-ref..> : interceptor参照
- <param..> : interceptorのパラメータ定義
- <default-interceptor-ref..> : デフォルトinterceptor
・デフォルトのinterceptor(struts-default.xml)
<interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/><!-- 例外処理を担当 --> <interceptor-ref name="alias"/><!-- 違うリクエストのパラメータの別名変換?? --> <interceptor-ref name="servletConfig"/><!-- Actionから直接ServletAPIアクセス可能 --> <interceptor-ref name="i18n"/><!-- 国際化サポート --> <interceptor-ref name="prepare"/><!-- Actionのprepare()メソッド呼び出し --> <interceptor-ref name="chain"/><!-- ActionChain --> <interceptor-ref name="scopedModelDriven"/><!-- setModel()でModelをActionに渡す --> <interceptor-ref name="modelDriven"/><!-- ActionがModelDrivenを実装した場合、getmodel()の結果をValueStackに設定 --> <interceptor-ref name="fileUpload"/><!-- file upload関連 --> <interceptor-ref name="checkbox"/><!-- checkbox? --> <interceptor-ref name="multiselect"/><!-- select?--> <interceptor-ref name="staticParams"/><!-- xmlの<action>タグの<param>をactionに渡す--> <interceptor-ref name="actionMappingParams"/><!-- ??? --> <interceptor-ref name="params"><!-- リクエストパラメータをActionの属性に設定 --> <param name="excludeParams">^action:.*,^method:.*</param> </interceptor-ref> <interceptor-ref name="conversionError"/><!-- 型変換 --> <interceptor-ref name="validation"><!-- xxxAction-validation.xmlからvalidation実行 --> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"><!-- Actionクラスのvalidate実行 --> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="debugging"/><!-- デバッグメッセージ --> <interceptor-ref name="deprecation"/><!-- ??? --> </interceptor-stack>
・Actionにinterceptor定義サンプル
<package name="lee" extends="struts-default"> <!-- interceptor定義 --> <interceptors> <interceptor name="interceptor名1" class="クラス1"/> <interceptor name="interceptor名2" class="クラス2"> <!-- パラメータ指定 --> <param name="パラメータ1">パラメータ値1</param> <param name="パラメータ2">パラメータ値2</param> </interceptor> <interceptor-stack name="Stack名"> <interceptor-ref name="interceptor名1"/> <interceptor-ref name="interceptor名2"/> </interceptor-stack> </interceptors> <!-- デフォルトinterceptor --> <!-- パッケージ内全てのActionに有効 --> <!-- 一つのみ定義できる --> <default-interceptor-ref name="interceptor名1" /> <action name="login" class="action.LoginAction"> <result name="error">/WEB-INF/content/error.jsp</result> <result>/WEB-INF/content/welcome.jsp</result> <interceptor-ref name="interceptor名2"> <!-- 定義時のパラメータは上書きされる --> <param name="パラメータ1">パラメータ値1</param> <param name="パラメータ2">パラメータ値2</param> </interceptor-ref> </action> </package>