【问题标题】:Struts 2 redirect on validation failure and keep error messageStruts 2 在验证失败时重定向并保留错误消息
【发布时间】:2011-07-02 16:30:18
【问题描述】:

我试图在重定向操作的输入字段后显示验证错误消息。我正在尝试使用 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>

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 的表单,由于我将 name 字段留为 emtpy,因此验证失败。 MessageStoreInterceptor 存储字段错误,然后输入重定向指向列表动作,但列表动作显然转发到输入转发没有先执行列表方法。

所以如果我将标签放在 list.jsp 中,我可以从验证中看到错误消息,但是由于 list.action 的 list 方法尚未执行,因此未填充 list.jsp 中的下拉列表。

有什么方法可以实现我的需要吗? 任何帮助都非常受欢迎。 谢谢

【问题讨论】:

    标签: validation redirect struts2


    【解决方案1】:

    here 所述,MyAction 需要实现 Preparable,这样当验证失败时,由于在它之前调用了 prepare() 方法,我们仍然可以填充控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      相关资源
      最近更新 更多