Struts2 如何将参数从一个动作传递到另一个动作

Struts2 如何将参数从一个动作传递到另一个动作,struts2,Struts2,您好,我是Struts2新手,希望在重定向时将参数从一个动作发送到另一个动作 我的表格是 <s:form action="saveComment"> <s:push value="ai"> <s:hidden name="id"/> <table cellpadding="

您好,我是Struts2新手,希望在重定向时将参数从一个动作发送到另一个动作

我的表格是

<s:form action="saveComment">
                            <s:push value="ai">
                                <s:hidden name="id"/>
                                <table cellpadding="5px">
                                    <tr><td><s:textarea name="description" rows="5" cols="60" theme="simple" />
                                        </td>
                                        <td> <s:submit type="image" src="images/sbt.gif"  >
                                             </s:submit>
                                        </td></tr>

                                </table>
                            </s:push>
                        </s:form>

我的struts.xml文件如下

 <action name="saveComment" method="saveComment" class="com.weaverants.web.AIAction">

        <result name="success" type="redirect">
            <param name="actionName">displayAI</param>
            <param name="aiId">${aiId}</param>
        </result>

    </action>


   <action name="displayAI" method="displayAI"  class="com.weaverants.web.AIAction">
        <result name="success" >/display_ai.jsp</result>
    </action>

显示器
${aiId}
/display_ai.jsp

您已经在
saveComment
中传递了所有参数,您需要将结果类型声明为
redirectAction
并将
操作
名称指定为redirectAction和任何其他所需参数。像

<action name="gatherReportInfo" class="...">
      <result name="showReportResult" type="redirectAction">
         <param name="actionName">generateReport</param>
         <param name="namespace">/genReport</param>
         <param name="reportType">pie</param>
         <param name="width">100</param>
         <param name="height">100</param>
         <param name="empty"></param>

      </result>
   </action> 
另一方面,将结果类型用作
重定向
意味着响应被告知将浏览器重定向到指定位置(来自客户端的新请求)。在这种情况下,还包括操作实例、操作错误、字段错误、,刚刚执行的etc将丢失并且不再可用,传递参数的唯一方法是通过URL或会话

可以使用与重定向操作相同的代码

重定向和actionRedirect之间的区别在于,第一个将使用
HttpServletResponse#sendRedirect(String)sendRedirect
,而后面的一个将由ActionMapperFactory提供的ActionMapper通过struts2框架进行处理,使用起来比
重定向
结果好得多

用于在这些结果类型的URL模式旁边传递数据,可以使用

  • 会话以在操作重定向之间保留数据

  • 您还可以尝试使用而不是
    重定向操作
    。第一个操作中的所有参数都将传递给第二个操作,但您确实需要在第二个操作中使用参数的getter和setter。它看起来像这样:

    <result type="chain">
    <param name="actionName">home</param>
    <param name="namespace">/secure</param>
    </result>
    
    
    家
    /稳妥
    
    不幸的是,连锁结果有很多负面影响,甚至官方文件也这么说。因此,除非你有迫切的理由使用它,否则请避免使用它。我看你的答案已经贴出来了。我想说,考虑使用一些形式的DI,比如Spring,以及非常容易使用的Struts2约定插件。这将在很大程度上删除您的xml配置,并且您的应用程序流将很容易用java理解。目前,您已经在xml中定义了流控制(而不仅仅是定义)。长故事短链接、重定向、转发就像goto。作为例外,这没关系,通常是一场噩梦。@Quaternion:完全同意你所说的。干得好+1
    <result type="chain">
    <param name="actionName">home</param>
    <param name="namespace">/secure</param>
    </result>