struts2配置type="redirect"傳引數資料會丟失解決辦法!
- <prename="code"class="java">
-
<result
- //這樣redirect是定向指向一個url頁面,傳引數的話用request會使得資料丟失。
- //錯誤傳參: ServletActionContext.getRequest().setAttribute("TreeList", list);
- 獲取資料:#request.TreeList
- //正確傳參: ServletActionContext.getRequest().getSession().setAttribute("TreeList", list);
-
獲取資料:# .TreeList
- request不行,就用session。雖然還不是很理解,但是問題解決了,記錄一下!
<result name="passForeignlands" type="redirectAction">LoansForeignlandsSituation.action</result>
type可以用“chain”,如果還不行,那麼你應該這麼寫
1 2 3 4 |
< result name = "passForeignlands" type = "chain" >
< param name = "actionName" >LoansForeignlandsSituation</ param >
< param name = "loans" >${loans}</ param >
</ result >
|
首先你應該在passForeignlands中有一個getLoans的方法,在LoansForeignlandsSituation中有一個setLoans的
在Action之間傳遞引數有如下方法:
(方法一):
Xml程式碼
- <result name="topic" type="redirect">findTopics.action?topicId=${topicId}</result>
(方法二):
Xml程式碼
- <result name="topic" type="redirect-action">
- <param name="actionName">findTopics</param>
- <param name="topicId">${topicId}</param>
- </result>
Xml程式碼
- <result name="topic" type="redirect">findTopics.action?topicId=${topicId}& ;elementId=${elementId}</result>
使用redirect重置連結需要字尾名,使用了redirect-action就不能使用了,就例如使用chain一樣,只需要寫action的配置名,如果加入字尾名.action,就會報出異常,action未配置正確。在這個配置檔案裡,多個引數的連線符使用了"& ;"(分號要挨著amp,此處由於轉義無法正常書寫故新增空格),這是由於XML的語法規範,應該使用"& ;"代替"&",原理和HTML中的轉義相同。
chain 用於把相關的幾個action連線起來,共同完成一個功能。
Java程式碼
- <action name="step1" class="test.Step1Action">
- <result name="success" type="chain">step2.action</result>
- </action>
- <action name="step2" class="test.Step2Action">
- <result name="success">finish.jsp</result>
- </action>
處於chain中的action屬於同一個http請求,共享一個ActionContext。
方法三
在struts2中通常用addActionMessage()來儲存操作提示並通過<s:actionmessage />標籤在頁面顯示. 但是如果我們通過redirect來重定向的話, 會丟失儲存在request裡的資訊, 這樣就會導致actionmessage裡的資訊無法在頁面顯示.
那麼如何儲存這個actionmessage呢?查看了一下struts2的struts.xml,發現有一個名為store的攔截器,類名為 org.apache.struts2.interceptor.MessageStoreInterceptor,這個攔截器的作用就是將我們放在 ActionMessaage中的資訊儲存到session中,而不丟失,那麼接下來的問題就好解決了。
在struts.xml中配置此攔截器即可.
<interceptor-ref name="store">
<param name="operationMode">AUTOMATIC</param>
</interceptor-ref>