2011-11-14 6 views
4

Struts 2の1つのアクションに対してフォーム検証を無効にしたいが、残りのインターセプタスタックを引き続き実行できるようにしたい。Struts 2:defaultStackインターセプタだけから検証メソッドを除外する

私は常に実行するユーザーがログインしているかどうかを確認しインターセプタを、持っているが、(例えば、情報を入力、)いくつかのアクションのために、私はアクションのvalidateが呼ばれるようにしたくありません。

私は次のようなものをやってみました:

<interceptors> 

    <interceptor name="bankingAuthenticator" 
     class="csc309.a4.banking.BankUserAuthenticator"/> 

    <interceptor-stack name="secureBanking"> 
     <interceptor-ref name="bankingAuthenticator"/> 
     <interceptor-ref name="defaultStack"/> 
    </interceptor-stack> 

</interceptors> 

<default-interceptor-ref name="secureBanking"/> 

<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit"> 
    <result name="success">/banking/Deposit.jsp</result> 
    <interceptor-ref name="defaultStack"> 
     <param name="workflow.excludeMethods">choose</param> 
    </interceptor-ref> 
</action> 

しかし、それはbankingAuthenticator迎撃だけでなく、検証の両方に出スキップします。

+1

修正;単一のアクションに対して 'interceptor-ref'を指定した場合、そのアクションのインターセプタを* all *指定する必要があります!あなたの答えを答えとして追加して、将来の訪問者があなたの仕事から恩恵を受けるようにしてください:) –

+0

上記のコードとあなたが答えに書いたコードの違いは何ですか...私に教えてください..... –

+0

@NIVESHSENGARの違いは、Depositアクションのインターセプタ名が上記のコードでは "defaultStack"で、答えの場合は "secureBanking"である点です。 – Jengerer

答えて

5

私はそれを考え出した - ソリューションは、次のようになります。

<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit"> 
    <result name="success">/banking/Deposit.jsp</result> 
    <interceptor-ref name="secureBanking"> 
     <param name="workflow.excludeMethods">choose</param> 
    </interceptor-ref> 
</action> 

インターセプタパラメータは、パラメータ名にインターセプタ名を付加することで、特定のインターセプタに制限することができます。この場合、workflowインターセプタだけがchooseメソッドを除外します。他のインターセプタは、アクションメソッドchooseのために起動します。

+1

恐ろしいです。あなたがそれを理解してうれしいです。 –

関連する問題