2012-01-22 54 views
3

喜我在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> 

和我的支柱。 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> 
+1

我看到你的答案已發佈。我只想說考慮使用某種形式的DI,例如Spring,以及使用struts2-conventions-plugin的簡單易用。這將做的主要是刪除你的xml配置,並且你的應用程序流程在java中很容易理解。就目前而言,您可以在xml中定義流量控制(而不僅僅是定義)。長連短的鏈接,重定向,轉發就像goto。作爲例外,沒關係,作爲一個噩夢。 – Quaternion

+0

@ Quaternion:完全同意你說的話。好的方式去+1 –

回答

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> 

生成重定向URL將

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

在使用的結果類型另一方面爲redirect裝置響應被告知將瀏覽器重定向到指定的位置(來自客戶端的新的請求) 。在這種情況下,剛剛執行的動作實例,動作錯誤,字段錯誤等將丟失並且不再可用,並且只有通過URL或通過會話才能傳遞參數的方法可以使用與針對redirectAction所述相同的代碼重定向和actionRedirect之間d

的區別是第一個將使用HttpServletResponse#sendRedirect(String) sendRedirect而後來的人會通過的ActionMapper由ActionMapperFactory提供的Struts2框架被照顧的是遠好於Redirect結果使用。

對於通過這些結果類型的URL模式旁邊的數據,可以使用

  1. 會話持久化操作之間的數據重定向。
  2. ScopeInterceptor
1

您也可以嘗試使用的chain result代替redirectAction。所有從第一個動作的參數將被傳遞給第二個動作,但你需要有參數的getter和setter在第二個動作。它看起來像這樣:

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

不幸的是,連鎖的結果有這麼多消極的方面,甚至官方文件都這樣說。所以,除非你有一個緊迫的理由使用它,避免這一點。 [鏈(http://struts.apache.org/2.0.14/docs/action-chaining.html) –

相關問題