在struts 2中重定向后填充字段

时间:2011-07-05 19:46:25

标签: forms validation redirect parameters struts2

我试图了解是否有一种最简单的方法来填充表单的字段,在验证失败后重定向(按照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模式下运行。使用上面的代码,一切都按预期工作,但看起来很奇怪,我必须列出结果标记内的所有参数。

有更好更短的方法吗? 感谢

1 个答案:

答案 0 :(得分:0)

通过重定向重新开始,除了显式传入的参数外,你会抛出值堆栈。你可能想要的是链,它会使值堆叠滚雪球。

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

然后您可以使用基本结果标记,可能不需要正文。

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