【问题标题】:Populate fields after redirect in struts 2在struts 2中重定向后填充字段
【发布时间】:2011-07-05 19:46:25
【问题描述】:

我试图了解是否有一种最简单、更短的方法来填充表单的字段,在它验证失败并被重定向后(遵循here 描述的模式)。

我有一个从 addPerson.action 动作调用的表单,提交动作是 savePerson.action。 如果验证失败,我会重定向传递所有参数,以便重定向页面将使用用户插入的数据填充字段,避免用户从头开始的麻烦。 这个解决方案的问题是我必须在 struts.xml 中列出表单的每个参数,如下例所示:

<action name="savePerson" class="personAction" method="savePerson">
        <interceptor-ref name="store">
            <param name="operationMode">STORE</param>
        </interceptor-ref>
        <interceptor-ref name="myStack" />
        <result name="success" type="redirectAction">
            <param name="actionName">listPeople</param>
        </result>
        <result name="input" type="redirectAction">
            <param name="actionName">addPerson</param>
            <param name="parse">true</param>
            <param name="person.name">${person.name}</param>
            <param name="person.surname">${person.surname}</param>
            <param name="person.gender">${person.gender}</param>
            <param name="person.email">${person.email}</param>
            <param name="person.mobile">${person.mobile}</param>
        </result>
    </action>
    <action name="addPerson" class="personAction" method="addPerson">
        <interceptor-ref name="store">
            <param name="operationMode">RETRIEVE</param>
        </interceptor-ref>
        <interceptor-ref name="myStack" />
        <result name="success">/person/add.jsp</result>
        <result name="input">/person/add.jsp</result>
    </action>

我必须使用 MessageStoreInterceptor 来保存和检索来自重定向的验证错误消息。

我已经在使用 ajax 验证,但我希望我的页面也可以在非 javascript 模式下工作。使用上面的代码,一切都按预期工作,但看起来很奇怪,我必须在结果标签中列出所有参数。

有没有更好更短的方法? 谢谢

【问题讨论】:

  • 只是好奇......您在addPerson 方法中正在做什么,当验证失败时您需要重定向到它?因为通常情况下,&lt;result name="input"&gt;/person/add.jsp&lt;/result&gt; 会作为 savePerson 操作的结果,而这已经足够了。
  • 但是如果你在验证失败后点击刷新,浏览器会询问你是否要重新提交表单,这是here描述的问题之一
  • nmc 是正确的。验证失败后不要重定向。 redirect-after-post 模式适用于后续页面,而不是重新显示输入页面以纠正验证错误。验证成功并处理表单后重定向。
  • 如果输入页面需要预填充数据怎么办?在这种情况下,我是否需要重定向到操作(填充数据)而不是 jsp?

标签: forms validation redirect parameters struts2


【解决方案1】:

通过重新开始重定向,除了显式传入的参数之外,您将丢弃值堆栈。您可能想要的是链,它将值堆栈滚雪球。

查看此处查看结果类型列表,Chain 的链接有一些示例:http://struts.apache.org/2.2.1.1/docs/result-types.html

你可以只使用基本的结果标签,可能不需要正文。

查看 nmc 的评论。这也是我做的,使用链或redirectAction不是一个好主意......创建意大利面条动作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2011-03-05
    相关资源
    最近更新 更多