天天看點

Struts2 redirect、redirectAction、chain差別

Chain Result:

這個result調用另外的一個action,連接配接自己的攔截器棧和result。

  • actionName (預設) - 被調用的action的名字
  • namespace - 被調用的action的名稱空間. 如果名稱空間為空,這預設為目前名稱空間
  • method - 用于指定目标action的另一個方法被調用. 如果空,預設為excute方法

Redirect Action Result:

這個Result使用ActionMapperFactory提供的ActionMapper來重定位浏覽器的URL來調用指定的action和(可選的)namespace. 這個Result比ServletRedirectResult要好.因為你不需要把URL編碼成xwork.xml中配置的ActionMapper提供的模式. 這就是說你可以在任意點上改變URL模式而不會影響你的應用程式. 是以強烈推薦使用這個Result而不是标準的redirect result來解決重定位到某個action的情況.

  • ActionName (預設) - 重定位到的action名
  • namespace - action的名稱空間. 如果為null,則為目前名稱空間

<result name="topic" type="redirectAction">

     <param name="actionName">findTopics</param>

     <param name="topicId">${topicId}</param>

</result>

Redirect Result

調用{@link HttpServletResponse#sendRedirect(String) sendRedirect}方法來轉到指定的位置. HTTP響應被告知使浏覽器直接跳轉到指定的位置(産生用戶端的一個新請求). 這樣做的結果會使剛剛執行的action(包括action執行個體,action中的錯誤消息等)丢失, 不再可用. 這是因為action是建立在單線程模型基礎上的. 傳遞資料的唯一方式就是通過Session或者可以為Ognl表達式的web參數(url?name=value)

  • location (預設) - action執行後跳轉的位址.
  • parse - 預設為true. 如果設定為false, location參數不會被當作Ognl表達式解析.
<result name="success" type="redirect">/displayCart.action?userId=${userId}</result>      

*********************************************************************************************************

今天在用struts2在做項目時候,從一個action我想跳轉到另一個action,并且呢得帶上值。說說我的做法吧,首先你得在你的第一個action中這個id必須要有set、get方法。

跳轉時你的struts.xml:

(方法一):

     <result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result>

(方法二):

     <result name="topic" type="redirect-action">

           <param name="actionName">findTopics</param>

           <param name="topicId">${topicId}</param>

      </result>

如果是多個參數的話,繼續再加幾個<param>就行了,對于(方法一)如果是多個參數的怎麼辦?

<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}&amp;elementId=${elementId}</result>

這不就行了。

********************************************************************************

使用redirect重置連結需要字尾名,使用了redirectAction就不能使用了,

就例如使用chain一樣,隻需要寫action的配置名,如果加入字尾名.action,就會報出異常,action未配置正确。

struts2 redirect-action 傳遞 參數

      在做一個系統,使用struts2架構,在送出一個請求後,将擷取的資料對象再要生成一個序列号,為了防止重新整理生成備援序列号,就在請求處理完成後,直接重定向到顯示該資訊的action中:

<action name="enterpreinfo" class="preinfoBusinessAction" method="enterPreinfoSub">

    <result name="success" type="redirectAction">

          showpreinfo?preinfo.order_number=${preinfo.order_number}&amp;preinfo.company_name=${preinfo.company_name}

    </result>

    <result name="error" type="redirect">

        <param name="location">/error.jsp</param>

    </result>

</action>

因為使用了redirectAction,是以要注意不能将showpreinf?preinfo.order_number=${preinfo.order_number}寫成showpreinf.action?preinfo.order_number=${preinfo.order_number}

在這個配置檔案裡,多個參數的連接配接符使用了"&amp;",但XML的文法規範,應該使用"&amp;"代替"&",原理和HTML中的轉義相同,開始沒有注意,在struts分析配置檔案時,總是報出這樣的錯誤:

The reference to entity "preinfo" must end with the ';' delimiter.

?

進行上面說明的替換後,就正常了。