Struts2 兩個Action之間動態傳參數

兩個Action 動態傳參數

       研究了近兩天的時間,終於把一個很簡單的問題給搞定了,那它是什麼問題呢?就是Struts2的兩個Action之間傳參的問題。
       需求功能是這樣:Action1 獲取數據庫配置內容,得到相應Model的 動態URL ,這裏的URL 有的是Action有的是JSP頁面。


        1.使用result 類型中的  redirect 類型,如下:
          <result name="success" type="redirect">${dynamicUrl}?objectId=${objectId}&param1=${param1}</result>
          這樣傳參才能達到Action取參數的需要,如果要是加上 :
         <param name="param1">${param1}</param>
        <param name="items">${items}</param>

          那麼 param1 和 items 這兩個參數都無法從目標Action裏得到,如果想得到的話只能用  objectId=${objectId}&param1=${param1} 這種方式,或者用 session來實現,這樣就有點複雜了,而且使用起來也相當的不方便。後來又嘗試了第二種方式:
        
         2.使用result類型中的redirect-action類型  如下:
        <result name="success" type="redirect-action">
             <param name="actionName">${actionName}</param>
              <param name="namespace">${namespace}</param>
        </result>
         此時,result之間不能再設其它的自定義的參數了,因爲 redirect-action對應的是  org.apache.struts2.dispatcher.ServletActionRedirectResult ,而actionName和namespace是它的兩個屬性,還有一個重要屬性就是methodName,如果要再加其它自己定的參數,只能擴展該類了。我在此基礎上,又在result 之外添加了幾個param 參數,如:
      

        <param name="param1">${param1}</param>
        <param name="param2">${param2}</param>
        <result name="success" type="redirect-action">
             <param name="actionName">${actionName}</param>
             <param name="namespace">${namespace}</param>
        </result>
     但是還是不能將 param1和param2兩個參數傳到目標Action中。既然Struts2有這種機制,那麼它就一定能夠實現,兩個Action的動態傳參,只是我對它不瞭解而已,後來,我又翻出來Strut2的源碼和XWork的源碼,再結果網上的資料,又嘗試了第三種方式,終於可以了。

  3.使用reulst 類型中chain類型 如下:

   <action name="getTemplate" class="tabAction" method="getTemplateByParas">
         <param name="objectId">${objectId}</param>
        <param name="param1">${param1}</param>
        <param name="items">${items}</param>
       
        <result name="success" type="chain">
         <param name="actionName">${actionName}</param>
         <param name="namespace">${namespace}</param>
        </result>
        
  </action>

       這樣就可以實現傳參了,這裏的參數所有對象都可以傳,包括map,List,set 等集合也可以。同時這裏還需要注意一個小問題,chain這種類型是XWork中的result類型,它對應的類是:
       com.opensymphony.xwork2.ActionChainResult .   這裏需要注意一個小問題, actionName,namespace都是他的屬性,所以對於傳過的URL參數要做一下處理。
       actionName必須是Action的名稱,namespace是他命名空間,必須以"/"開頭,如:
       /tab/getTemplate.action       則 namespace="/tab"   ;  actionName=”getTemplate“; 


這是小弟在使用Struts2時,遇到兩個Action動態傳參的問題時總結的心得,希望對個位同仁有所幫助,不當之處,請多指教。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章