2012-07-31 40 views
0

我有多個操作,完成後重定向回到一般頁面(showStuff)。我正在尋找一種不重複每個重定向操作的參數列表的方法。重新使用struts.xml中的重定向動作?

什麼我是這樣的:

<action name="doThis" class="com.domain.package.MyAction" method="doThis"> 
    <result type="redirectAction"> 
     <param name="actionName">showStuff</param> 
     <param name="parse">true</param> 
     <param name="selectedYear">${selectedYear}</param> 
     <param name="selectedMonth">${selectedMonth}</param> 
     <param name="selectedDay">${selectedDay}</param> 
    </result> 
</action> 
<action name="doThat" class="com.domain.package.MyAction" method="doThat"> 
    <result type="redirectAction"> 
     <param name="actionName">showStuff</param> 
     <param name="parse">true</param> 
     <param name="selectedYear">${selectedYear}</param> 
     <param name="selectedMonth">${selectedMonth}</param> 
     <param name="selectedDay">${selectedDay}</param> 
    </result> 
</action> 

我想保持的參數列表中showStuff動作定義中,然後用像這樣:

<action name="doThis" class="com.domain.package.MyAction" method="doThis"> 
    <result type="redirectAction"> 
     <param name="actionName">showStuff</param> 
    </result> 
</action> 
<action name="doThat" class="com.domain.package.MyAction" method="doThat"> 
    <result type="redirectAction"> 
     <param name="actionName">showStuff</param> 
    </result> 
</action> 

這可能嗎?

+0

它很可能你正在嘗試做什麼。你是否面臨任何具體問題? – 2012-07-31 08:01:39

+0

@ UmeshAwasthi我不明白怎麼可能。 'selectedYear','selectedMonth'等參數來自'MyAction'類,那麼在不聲明它們的情況下它們不會在重定向時丟失?我錯了嗎? – anu 2012-07-31 09:51:51

+0

是的,我錯誤地閱讀了這個問題,重定向將清除值棧,並且請求響應對象將到位 – 2012-07-31 10:10:44

回答

1

有幾個選項。

老實說,我會跳過我的大部分解決方法,並將它們放入會話中。

一旦他們進入會話,創建一個攔截器和接口(Dateable或其他)。在攔截器中檢查變量的會話(見下文),如果動作是Dateable,則將它們設置爲動作,然後完成。

另一種選擇是將這些變量封裝爲日期,並使用內置的轉換器或使用自己的轉換器。那麼你只需要一個參數。這個選項也適用於攔截器的想法。

0

事實證明,這是非常可能的。這是你如何做到這一點:

添加一個全球性的結果:

<global-results> 
    <result name="show-stats" type="redirectAction">  
     <param name="actionName">showStats</param> 
     <param name="parse">true</param> 
     <param name="selectedYear">${selectedYear}</param> 
     <param name="selectedMonth">${selectedMonth}</param> 
     <param name="selectedDay">${selectedDay}</param> 
    </result> 

然後採取的行動:

<action name="doThis" class="com.domain.package.MyAction" method="doThis"/> 
<action name="doThat" class="com.domain.package.MyAction" method="doThat"/> 

最後在Java代碼中,只是:

return "show-stats"; 

而且喲你完成了。

作爲一個旁註,爲什麼我必須花費這麼多時間來堅持最基本的DRY原則?並非所有這些框架都應該......你知道......簡化東西嗎?只是想知道...

0

我正面臨同樣的問題,無盡的參數列表變得越來越長,在幾個地方重複。我落得這樣做,我創建了一個外部文件,並宣佈它在struts.xml中作爲一個實體遂把它,而不是重複所有PARAMS

這正好DOCTYPE標籤

<!ENTITY referenceName SYSTEM "fileName"> 

然後你包括它像這樣

&referenceName;