我正在尝试在重定向操作的输入字段后显示验证错误消息。我正在尝试使用MessageStoreInterceptor,但没有太大的成功。 这是struts.xml:
<action name="list" class="myAction" method="list">
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<interceptor-ref name="myDefaultInterceptorStack" />
<result name="success">/list.jsp</result>
<result name="input">/list.jsp</result>
</action>
<action name="add" class="myAction" method="add">
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<interceptor-ref name="myDefaultInterceptorStack" />
<result name="success" type="redirectAction">
<param name="actionName">list</param>
</result>
<result name="input" type="redirectAction">
<param name="actionName">list</param>
</result>
</action>
操作的 list 方法设置list.jsp中下拉列表的值,因此必须在显示jsp之前执行。
验证在MyAction-add-validation.xml中:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message key="name.required" />
</field-validator>
</field>
</validators>
如果我调用list.action,则会正确填充list.jsp。然后我提交调用add.action的表单,因为我离开了名称字段emtpy,验证失败。 MessageStoreInterceptor存储字段错误,然后输入重定向指向列表操作,但列表操作显然转发到输入转发而不首先执行列表方法。
因此,如果我将标记放在list.jsp中,我可以看到验证中的错误消息,但是没有填充list.jsp中的下拉列表,因为list.action的list方法尚未执行。
有没有办法达到我的需要? 任何帮助都非常受欢迎。 感谢