liguofeng29’s blog

個人勉強用ブログだっす。

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>