struts2中關於result的返回類型一般我們是轉發到一個jsp頁面或者是html頁面等,但是struts2中的result的返回類型還有redirect,redirectAction,chain。對於這三種返回類型之間肯定是有區別的,下面我們來看看關於redirect redirectAction chain這三種struts2的返回類型之間的區別。
當使用type=“redirectAction” 或type=“redirect”提交到一個action並且需要傳遞一個參數時。這裏是有區別的:
使用type=“redirectAction”時,結果就只能寫Action的配置名,不能帶有後綴:“.action”
<action name="Login" class="steven.actions.LoginAction"> <result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result> </action> |
<action name="Login" class="steven.actions.LoginAction"> <result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result> </action> |
<action name="Login" class="steven.actions.LoginAction"> <result name="success" type="redirect">User.action?u_id=${loginBean.u_id}</result> </action> |
1 redirect:action處理完後重定向到一個視圖資源(如:jsp頁面),請求參數全部丟失,action處理結果也全部丟失。
2 redirect-action:action處理完後重定向到一個action,請求參數全部丟失,action處理結果也全部丟失。
3 chain:action處理完後轉發到一個action,請求參數全部丟失,action處理結果不會丟失。
---------------------------------------------------------------------------------------------------------------------------------
一。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,則爲當前名稱空間
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表達式解析.
二。當使用type=“redirectAction” 或type=“redirect”提交到一個action並且需要傳遞一個參數時。這裏是有區別的:
a.使用type=“redirectAction”時,結果就只能寫Action的配置名,不能帶有後綴:“.action”
Java代碼
<action name="Login" class="steven.actions.LoginAction">
<result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>
</action>
b.使用type=“redirect”時,結果應是action配置名+後綴名
Java代碼
<action name="Login" class="steven.actions.LoginAction">
<result name="success" type="redirect">User.action?u_id=${loginBean.u_id}</result>
</action>
ps:1 redirect:action處理完後重定向到一個視圖資源(如:jsp頁面),請求參數全部丟失,action處理結果也全部丟失。
2 redirect-action:action處理完後重定向到一個action,請求參數全部丟失,action處理結果也全部丟失。
3 chain:action處理完後轉發到一個action,請求參數全部丟失,action處理結果不會丟失。