我有一个带有一些文本字段的 Jsp,它们使用 Hibernate 验证注释(操作中的 @Valid 或 @NotNull)进行验证,除了一个(输入图像文件)使用默认的 Struts2 验证(使用 ActionName-validation.xml)进行验证。当提交的表单无效时(当文本字段为空时),我想重定向到另一个操作,并且我想存储字段错误。
我试过这个:
<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),它们会起作用!会不会是休眠错误字段消息没有存储在会话中?