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

时间:2012-01-22 04:55:20

标签: struts2

嗨,我是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>

2 个答案:

答案 0 :(得分:3)

您已经在saveComment中传递参数,只需将结果类型声明为redirectAction,并将action名称指定为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> 

生成的重定向网址将为

 /genReport/generateReport.action?reportType=pie&width=100&height=100

另一方面,使用结果类型为redirect表示响应被告知将浏览器重定向到指定位置(来自客户端的新请求)。在这种情况下还有动作实例,动作错误,字段错误,刚刚执行的等等丢失,不再可用,只有通过URL或通过会话传递参数的方式

可以使用与redirectAction相同的代码

Redirect和actionRedirect之间的区别是第一个将使用HttpServletResponse#sendRedirect(String) sendRedirect,而后者将由ActionMapperFactory提供的ActionMapper由struts2框架处理,因为它比Redirect更好用。结果

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

  1. 会话以在Action重定向之间保留数据。
  2. ScopeInterceptor

答案 1 :(得分:1)

您也可以尝试使用chain result代替redirectAction。第一个操作中的所有参数都将传递给第二个操作,但您需要在第二个操作中使用参数的getter和setter行动。它看起来像这样:

<result type="chain">
<param name="actionName">home</param>
<param name="namespace">/secure</param>
</result>