私はいくつかのテキストフィールドを持つ Jsp を持っています。これらは、デフォルトの Struts2 検証 (ActionName-validation.xml を使用) で検証される 1 つ (入力画像ファイル) を除いて、Hibernate 検証アノテーション (アクションで @Valid または @NotNull) を使用して検証されます。送信されたフォームが無効な場合(テキストフィールドがnullの場合)に別のアクションにリダイレクトしたい、およびフィールドエラーを保存したい。
私はこれで試しました:
<interceptors>
<interceptor name="SessionCheckInterceptor" class="util.SessionCheckInterceptor"/>
<interceptor-stack name="mySessionValidationStack">
<interceptor-ref name="defaultStackHibernate" />
<interceptor-ref name="SessionCheckInterceptor" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="mySessionValidationStack"/>
<action name="insert" class="actions.InsertAction" >
<interceptor-ref name="mySessionValidationStack">
<param name="fileUpload.allowedTypes">image/png</param>
</interceptor-ref>
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="success" type="tiles" >baseLayout</result>
<result name="error" type="redirectAction" >
<param name="actionName">showinsertform</param>
</result>
<result name="input" type="redirectAction" >
<param name="actionName">showinsertform</param>
</result>
</action>
<action name="showinsertform" class="actions.ShowInsertFormAction" >
<interceptor-ref name="mySessionValidationStack" />
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<result name="success" type="tiles" >insert</result>
<result name="error" type="tiles" >baseLayout</result>
</action>
しかし、フォームを送信すると、フィールドのエラー メッセージを表示せずにリダイレクトが成功します。多分私はインターセプターを間違って設定していますか?休止状態を使用して、何かをオーバーライドする必要がありますか? アクションに (addActionError を使用して) 手動でエラー メッセージを設定しようとすると、うまくいきます。休止状態のエラー フィールド メッセージがセッションに保存されていない可能性はありますか?