2012-02-02 60 views
1

我想在重定向到不同動作後保留屬性值。我知道,因爲我們正在導航到不同的行動(請求),所以價值將會消失。但我需要一些如何實現這個目標?Struts 2 - 持久屬性值用於重定向動作

這裏是我的代碼:

<action name="save" class="saveAction" method="saveData"> 
      <result name="success" type="redirectAction">redirectedPageAction</result> 
      <result name="successView" >successView.jsp</result> 
      <result name="error" >error.jsp</result> 
</action> 

    <action name="redirectedPageAction" class="month" method=""> 
     <result name="success">employeesList.jsp</result> 
    </action> 

在攢動類我使用addActionMessage(絃樂味精)方法來設置值。我也有同樣的getter/setter。

我試過,但沒有獲得成功:

<action name="redirectedPageAction" class="month" method=""> 
      <result name="success">employeesList.jsp> 
       <param name="msg">${msg}</param>  
      </result> 
    </action> 

我想這是由adActionMessage(MSG)在我的employeelist.jsp頁面設置值。我得到空指針struts異常。

請幫助..

回答

0

您可以通過redirectAction你的財產變量,這樣

<action name="save" class="saveAction" method="saveData"> 
      <result name="success" type="redirectAction"> 
       <param name="actionName">redirectedPageAction</param> 
       <param name="msg">${msg}</param> 
      </result> 
      <result name="successView" >successView.jsp</result> 
      <result name="error" >error.jsp</result> 
</action> 

另外一個參數,不要錯過補充的getter/setter爲msg變量在redirectedPageAction行動

+0

感謝您的回覆。正如我在自己的問題中指出的那樣,這對我不起作用。 – Ved 2012-02-02 14:27:33

+0

它與你提到的不一樣。我假設你想要將'msg'變量從'saveAction'類傳遞給'redirectPageAction'類。因此,在「成功」結果中,您需要添加'type = redirectAction'並指定操作名稱和'msg'變量作爲參數。這不是你的情況嗎? – anu 2012-02-02 14:36:01

+0

你試過的東西(加入參數)是用'month'動作類映射它應該與'saveAction'類映射與我在我的答案中提到的格式。看看[這篇文章](http://stackoverflow.com/a/5242013/456135) – anu 2012-02-02 14:41:57

1

操作的每個請求的創建。如果您實際上沒有將第一個操作的任何內容傳遞給第二個操作,那麼第二個操作將不會檢索任何內容。 Getters不會更改HTTP機制。

如果您對消息/等有興趣,請使用MessageStoreInterceptor,或手動執行。

+0

感謝您的回答。我一定會檢查一樣的。 – Ved 2012-02-02 14:31:08

1

既然你已經提到過,並且你知道它會創建一個新的請求循環和動作,併爲每個請求創建,因爲它們也作爲數據對象工作,這意味着你的請求/響應參數將會丟失。

現在你有幾個選項,使用Struts2的建立在這個message-store-interceptor支持

  1. 嘗試。

此攔截器已創建用於將ValidationAware操作的消息/錯誤和字段錯誤存儲到HTTP會話中,在您的用例中非常有用。

如果您想要更廣泛的作用域,您可以將數據存儲在會話中並在稍後階段檢索,或者可以將值作爲查詢參數傳遞。

+0

感謝您的回覆。將數據存儲在Session中可能不符合我的需求,但另一個選項似乎很好.thx再次... !!! – Ved 2012-02-02 14:32:09

+0

@ programmer_1幾乎所有通過重定向保存數據的東西都使用會話 - 這是用戶特定數據的用途。消息存儲攔截器將會話抽象出來,但這就是它的工作原理。 – 2012-02-02 15:01:24

1

我面對這個問題之前,有時候你需要在一個動作之後顯示一個全新的視圖,並且重定向結果沒有考慮任何以前的數據(http請求的東西)。 我們想製造一個定製的攔截器,但在做之前我發現這個 http://www.mail-archive.com/[email protected]/msg77854.html

它真的幫了我們很多。

話雖如此,您使用的是什麼版本的Struts 2?我們使用Struts 2.2.3,傳遞給redirectAtion的參數工作正常。 你在這兩項行動中都有二傳手和吸氣手嗎?

+0

thanx成功使用這種方法您的答覆。但我使用上面的帖子解決了我的問題。 – Ved 2012-02-03 06:10:59