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