2014-06-16 81 views
2

我有一個登錄動作,在成功執行後重定向到前一頁(我在會話中存儲前一頁,以便稍後可以取回)。在Struts2的,我能找到兩種方式來做到這一點重定向:Struts2重定向到具有未知參數數量的另一個動作

<action name="login" class="com.myapp.login.Login"> 
     <result name="redirect" type="redirect">${previousAction.requestURL}</result> 
    </action> 

在這個例子中,getPreviousAction()getRequestURL()方法(這是一個自制的方法,它不是ntive Struts2的)將被調用和這將返回前一頁面的URL如預期,例如:

somenamespace/index.action 

也有另一種類型的重定向:

<action name="login" class="com.myapp.login.Login"> 
    <result type="redirectAction"> 
     <param name="actionName">${previousAction.name}</param> 
     <param name="namespace">/${previousAction.namespace}</param> 
    </result> 
</action> 

我想用這個redirectaction結果因爲它更乾淨。但是,當查詢參數是url的一部分時,我遇到了問題。例如:

somenamespace/index.action?name=john&age=50 

我知道我可以添加這些PARAMS在我struts.xml中硬編碼的,但問題是我的登陸行動應該重定向到任何先前調用的動作,我不事先知道哪個查詢參數以前行動了。這是典型的用例不同,你確切地知道你正在重定向到

一個極壞的解決方案,我發現這是加入EVERY帕拉姆可能的,其動作(我在struts.xml中的所有行動都則params的集合)和然後使用以下選項:

<param name="suppressEmptyParameters">true</param> 
+0

更好的方法來設置您的參數在請求範圍內,並在您的下一個動作中獲取它們全部 –

+0

http://struts.apache.org/development/2.x/docs/parameters-in-configuration-results.html。 –

回答

3

您可以保存ActionMapping的動作名稱,名稱空間和參數。

ActionMapping mapping = ServletActionContext.getActionMapping(); 

您還可以保存查詢字符串,而不是參數映射。

String params = request.getQueryString(); 

要將參數動態添加到redirectAction結果中,應該在動態參數中使用OGNL。

<param name="actionName">${previousAction.name +'?'+ parameters}</param> 

認爲你有parameters getter和從保存先前的查詢字符串,操作名稱和名稱空間會話初始化它。

+0

太棒了,在文檔中它看起來像你不能提供額外的參數,只有名字。 – user1884155

相關問題