何时在struts2中使用重定向和链结果类型

时间:2011-01-21 06:40:00

标签: struts2

在我的struts 2项目中使用重定向操作时,我会丢失所有值,例如操作错误和字段错误。

我在网上查了一下,找到了2个选项

  • 链 - 这个用不多,我不知道为什么..
  • MessageStoreInterceptor - 需要将其放在每个操作

任何人都可以告诉我何时首选重定向(或RedirectAction)以及什么时候是首选链。

2 个答案:

答案 0 :(得分:12)

重定向操作会丢失当前值堆栈(请求范围内的任何内容),您当然可以通过将它们作为参数传递给下一个操作来设置保存这些值的操作,但这有点痛苦。

链保留了值堆栈,因此下一个操作可以处理从上一个操作创建的参数,而无需显式传递它们,因为有了这个雪球效果,您可以使用视图中的所有参数。

但人们普遍认为,自上而下的解决方案(可能自上而下不是最好的词......'结构化')比建立意大利面条行动的迷宫要好。

所以,当你面临压力要求工作并且不过分熟悉struts2时,请使用链接或重定向,然后肯定会回来修复它!一般来说,你应该使用一个拦截器。

如果某个操作根据某些条件路由到其他操作,最好使拦截器将其应用于包并将所有需要此有趣行为的操作放在该包中。然后很清楚这适用于哪些行动。

答案 1 :(得分:1)

第一个选项

<action name="remove" class="com.action.firstAction" method="remove">
         <result name="success" type="redirectAction">
            secondaction
            <param name="actionName">secondaction</param>
            <param name="namespace">/</param>
            <param name="param name">${param value}</param>
        </result>           
    </action>
<action name="secondaction" class="com.action.secondAction" method="result">
    <result name="success">result.jsp</result>
</action>

另一个选项

<action name="remove" class="com.action.firstAction" method="remove">
     <result name="success" type="chain">secondaction</result>
</action>
<action name="second action" class="com.action.secondAction" method="result">
    <result name="success">result.jsp</result>
</action>