【问题标题】:Struts 2 - Persist property value for redirect actionStruts 2 - 重定向操作的持久属性值
【发布时间】:2012-02-25 02:47:05
【问题描述】:

我想在重定向到不同的操作后保留一个属性值。我知道价值会消失,因为我们正在导航到不同的操作(请求)。但是我需要一些如何实现这一点的方法?

这是我的代码:

<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>

在保存操作类中,我使用 addActionMessage(String msg) 方法设置值。我也有相同的 getter/setter。

我试过了,但没有成功:

    <action name="redirectedPageAction" class="month" method="">
          <result name="success">employeesList.jsp>
               <param name="msg">${msg}</param>    
          </result>
    </action>

我想要在我的 employeelist.jsp 页面中由 adActionMessage(msg) 设置的值。我收到空指针 struts 异常。

请帮忙..

【问题讨论】:

    标签: redirect struts2


    【解决方案1】:

    操作是根据请求创建的。如果您实际上没有将任何内容从第一个操作传递到第二个操作,那么第二个操作将不会检索任何内容。 Getter 不会改变 HTTP 机制。

    如果您对消息/等特别感兴趣,请使用MessageStoreInterceptor,或手动进行。

    【讨论】:

    • 感谢您的回答。我一定会检查的。
    【解决方案2】:

    既然您已经提到了这一点,并且您知道它将创建一个新的请求周期和 Actions 并为每个请求创建,因为它们也作为 Data 对象工作,这意味着您的请求/响应参数将丢失。

    现在你的选择很少

    1. 尝试使用支持此message-store-interceptor 的 Struts2 构建。

    创建此拦截器是为了将 ValidationAware 操作的消息/错误和字段错误存储到 HTTP 会话中,在您的用例中非常有用。

    如果您想要更广泛的范围,您可以将数据存储在会话中并在稍后阶段检索它,或者可以将值作为查询参数传递。

    【讨论】:

    • 感谢您的回复。根据我的需要,在 Session 中存储数据可能不可行,但另一种选择似乎不错。再次感谢...!!!
    • @programmer_1 几乎所有通过重定向保留数据的东西都使用会话——它是用户特定数据的去向。消息存储拦截器将会话抽象出来,但这就是它的工作方式。
    【解决方案3】:

    我以前遇到过这个问题,有时您需要在操作后显示一个全新的视图,并且重定向结果不考虑任何以前的数据(http 请求内容)。 我们想创建一个自定义拦截器,但在这样做之前我发现了这个 http://www.mail-archive.com/user@struts.apache.org/msg77854.html

    这真的帮助了我们很多。

    话虽如此,您使用的是哪个版本的 Struts 2?我们使用 Struts 2.2.3 并且传递给 redirectAtion 的参数工作正常。 你在这两个动作中都有 setter 和 getter 吗?

    【讨论】:

    • 感谢您的回复。但我用上面的帖子解决了我的问题。
    【解决方案4】:

    您可以像这样将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>
    

    另外,不要错过在 redirectedPageAction 操作中为 msg 变量添加 getter/setter

    【讨论】:

    • 感谢您的回复。正如我在问题本身中指定的那样,这对我不起作用。
    • 和你说的不一样。我假设您想将 msg 变量从您的 saveAction 类传递给 redirectPageAction 类。因此,在success 结果中,您需要添加type=redirectAction 并指定操作名称和msg 变量作为参数。这不是你的情况吗?
    • 您尝试的东西(添加参数)是month 动作类映射,它应该是saveAction 类映射,具有我在回答中提到的格式。看看this post
    • 感谢您的回复,但这似乎对我不起作用..!我无法在 jsp 中获取 msg 的值。
    • 不能说你错过了什么,但我在我的项目中成功使用了这个方法
    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多