3

以下は、インターセプターの構成です。

    <interceptors>
        <interceptor-stack name="storeStack">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="store">
                <param name="operationMode">STORE</param>
            </interceptor-ref>
        </interceptor-stack>

        <interceptor-stack name="retrieveStack">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="store">
                <param name="operationMode">RETRIEVE</param>
            </interceptor-ref>
        </interceptor-stack>

        <interceptor-stack name="appDefaultStack">
            <interceptor-ref name="defaultStack">
                <param name="exception.logEnabled">true</param>
                <param name="exception.logLevel">ERROR</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>

そして私の行動:

    <action name="update/*" class="comics.comics.ComicsAction" method="view">
        <interceptor-ref name="retrieveStack" />
        <param name="key">{1}</param>
        <result>/comics/comics-chapters.jsp</result>
    </action>


    <action name="add" class="comics.comics.ChapterAction" method="add">
        <interceptor-ref name="storeStack" />
        <result type="redirectAction">
            <param name="parse">true</param>
            <param name="key">${key}</param>
            <param name="actionName">update</param>
            <param name="namespace">/comics</param>    
        </result>

        <result name="input" type="redirectAction">
            <param name="parse">true</param>
            <param name="key">${key}</param>
            <param name="actionName">update</param>
            <param name="namespace">/comics</param>    
        </result>

    </action>

私のcomics-chapters.jspページでは、フィールドエラーはなくなりました。しかし、入力結果を次のように変更すると、次のようになります。

         <result name="input">/comics/comics-chapters.jsp</result>

フィールドエラーが表示されます。

入力結果がアクションの場合にフィールドエラーを表示するにはどうすればよいですか?

4

3 に答える 3

4

これは、 を使用している場合redirectAction、Struts2 が新しい要求と応答オブジェクトを作成し、値スタックをクリアして新しい要求と応答を値スタックに配置するため、以前のデータが上書きされるためです。

ここにはいくつかのオプションがあります

  1. メッセージをアクションに保存し、アクションからメッセージをredirectAction取得してユーザーに表示できます。
  2. MessageStoreInterceptorを使用する

このようなユースケースを処理できるスコープ結果の保留中の長いリクエストがありますが、struts-3.x (aka 2.5) バージョンで来ると思います。

于 2012-09-25T11:25:54.263 に答える
1

storeこのようにインターセプターを上に置いてみてくださいdefaultStack

<interceptor-stack name="storeStack">
         <interceptor-ref name="store">
                <param name="operationMode">STORE</param>
         </interceptor-ref>
         <interceptor-ref name="defaultStack"/>

</interceptor-stack>

<interceptor-stack name="retrieveStack">
         <interceptor-ref name="store">
                <param name="operationMode">RETRIEVE</param>
         </interceptor-ref>
         <interceptor-ref name="defaultStack"/>

 </interceptor-stack>

インターセプターの順序に常に注意してください。

于 2012-09-25T11:32:16.080 に答える
0

Umeshが言うように、結果として指定したredirectActionにより、新しいアクションが呼び出されたときにエラーメッセージが値スタックからクリアされます。この場合の別のオプションは、チェーン結果を使用することです。チェーンの結果により、別のアクションが呼び出され、値スタックに既存のすべての値が保持されます。ただし、エラー メッセージにはChainingInterceptorを使用する必要があります。チェーンの結果と ChainingInterceptor の使用方法の詳細については、このブログ投稿
も参照してください。

于 2012-09-25T11:47:31.980 に答える