2011-07-05 35 views
2

我试图了解是否有一种最简单和最短的方式来填充表单的字段,在它没有通过验证并重定向之后(遵循描述here的模式)。在struts 2中重定向后填充字段

我有一个从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模式工作。上面的代码一切正常,但看起来很奇怪,我必须在结果标记中列出所有参数。

有没有更好更短的做法呢? 谢谢

+4

只是好奇......你在'addPerson'方法中做什么,你需要在验证失败时重定向到它?因为通常情况下,我会通过'savePerson'动作产生'/person/add.jsp',这样就足够了。 – nmc

+0

但是,如果在验证失败后点击刷新,浏览器会询问您是否要重新提交表单,这是[此处]描述的问题之一(http://www.theserverside.com/news/1365146/Redirect-After- Post) –

+0

nmc是正确的。验证失败后不要重定向。重定向后模式用于后续页面,而不是重新显示输入页面以纠正验证错误。验证成功并重新处理表单后重定向。 –

回答

0

使用重定向重新开始,除了显式传入的参数之外,您会抛出值栈。您可能需要的是链,即雪球的值栈。

在这里看到的结果类型的列表,链接链有一些例子:http://struts.apache.org/2.2.1.1/docs/result-types.html

然后,您可以只使用基本的结果标记,可能不会需要一个机构。

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