我希望在重定向到其他操作后保留属性值。我知道,由于我们正在导航到不同的行动(请求),因此价值将会消失。但我需要了解一下如何实现这一目标呢?
这是我的代码:
<action name="save" class="saveAction" method="saveData">
<result name="success" type="redirectAction">redirectedPageAction</result>
<result name="successView" >successView.jsp</result>
<result name="error" >error.jsp</result>
</action>
<action name="redirectedPageAction" class="month" method="">
<result name="success">employeesList.jsp</result>
</action>
在save action类中,我使用addActionMessage(String msg)方法来设置值。我也有同样的getter / setter。
我试过这个但没有成功:
<action name="redirectedPageAction" class="month" method="">
<result name="success">employeesList.jsp>
<param name="msg">${msg}</param>
</result>
</action>
我想要在employeeelist.jsp页面中由adActionMessage(msg)设置的值。我得到空指针struts异常。
请帮助..
答案 0 :(得分:1)
按请求创建操作。如果您实际上没有将第一个操作中的任何内容传递给第二个操作,则第二个操作将无法检索任何内容。 Getters不会改变HTTP机制。
如果您对邮件/等有兴趣,请使用MessageStoreInterceptor,或手动执行。
答案 1 :(得分:1)
由于您已经提到了这一点,并且您知道它将创建一个新的请求周期和每个请求创建的Actions,因为它们也可以作为Data对象使用,这意味着您的请求/响应参数将丢失。
现在你有几个选项
已创建此拦截器以将ValidationAware操作的消息/错误和字段错误存储到HTTP会话中,并且在您的用例中非常有用。
如果您想要更广泛的范围,您可以在会话中存储数据并在以后阶段检索数据,也可以将值作为查询参数传递。
答案 2 :(得分:1)
之前我遇到过这个问题,有时你需要在一个动作后显示一个全新的视图,重定向结果没有考虑任何以前的数据(http请求的东西)。 我们想创建一个自定义拦截器,但在此之前我发现了这个 http://www.mail-archive.com/user@struts.apache.org/msg77854.html
这对我们很有帮助。
话虽如此,你使用的是什么版本的Struts 2?我们使用Struts 2.2.3,传递给redirectAtion的参数工作正常。 你们两个行动都有制定者和吸气者吗?
答案 3 :(得分:0)
您可以使用redirectAction
作为参数传递属性变量
<action name="save" class="saveAction" method="saveData">
<result name="success" type="redirectAction">
<param name="actionName">redirectedPageAction</param>
<param name="msg">${msg}</param>
</result>
<result name="successView" >successView.jsp</result>
<result name="error" >error.jsp</result>
</action>
另外,不要错过在msg
操作中为redirectedPageAction
变量添加getter / setter