struts2 中redirectAction如何傳遞參數!,strutsredirect參數

來源:互聯網
上載者:User

struts2 中redirectAction如何傳遞參數!,strutsredirect參數

在struts2中,初學者因為參數傳遞的問題往往會出現一些錯誤。

比如頁面跳轉的問題,在使用者註冊中,以一下代碼作為案例:

<struts>    <constant name="struts.action.extension" value="action,,"></constant>    <constant name="struts.devMode " value="true"></constant>     <constant name="struts.enable.DynamicMethodInvocation" value="true" />      <package name="user" namespace="/" extends="struts-default">        <action name="*" class="user.TotalAction" method="{1}" >            <result name="success">/WEB-INF/user/userlist.jsp</result>            <result name="modify">/WEB-INF/user/modifyit.jsp</result>            <result name="list" type="redirectAction">userlist</result>        </action>    </package></struts>
1     public String userlist() throws Exception {2         // TODO Auto-generated method stub3         UserDAO dao= new UserDAO();4         ArrayList<User> list= dao.getUser();5     //    System.out.println("dao::"+list.size());6         ActionContext acx= ActionContext.getContext();7         acx.put("USERLIST", list);8         9         return "success";

 

1     public String save() throws ClassNotFoundException, SQLException2     {3         UserDAO dao= new UserDAO();4         dao.modifyUser(user);5         return "list";6     }

筆者如果想要通過save()方法直接將值傳遞到>/WEB-INF/user/userlist.jsp。如果不藉助redirectAction,最笨的方法就是將userlist()方法重寫一遍,然後還回success。

但是藉助redirectAction,可以直接重新導向到新的地址。就是說通過配置一個struts中的rusult方法:加入redirectAction對象,可以在action中通過返回list方法,重新流入<action配置中,重新導向,然後再找到userlist方法,以此傳遞資料。《初次學習,總結如有不足或不對之處請指出》

struts2 中chain、redirect、redirectaction的區別 :

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處理結果不會丟失。

   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.