比如,當我要添加一個信用卡的時候,我需要信用卡的CardType, 這些數據是存在數據庫中的,我要先通過action 的一個 create方法,取到信用卡的類型:





Struts的配置文件:



input.jsp
...
<s:select name="creditCard.creditCardTypeId" list="creditCardTypeList" listKey="creditCardTypeId"
listValue="ccType" />
....

<s:select name="creditCard.creditCardTypeId" list="creditCardTypeList" listKey="creditCardTypeId"

....
當提交input.jsp 的時候,Validate 檢查沒有通過,這時我需要回到input.jsp,此時應該下拉列表框的CreditType應該被保留,只需要在example.CreditCardAction 實現 Preparable接口,并實現prepare 方法,然后在add的 action中加上


prepare方法:



Add Acton:









這樣,在驗證前將首先調用 prepare方法,即使失敗了回到input.jsp頁面creditCardType選擇框的值仍然存在。
<interceptor-ref name="defaultStack"/> 中的 defaultStack 是我們在struts.xml 中配置的,其中我們注釋掉了 <interceptor-ref name="prepare"/> 這樣在example.CreditCardAction中的其他Action就不會首先執行prepare方法,只有加上了 <interceptor-ref name="prepare"/> 的才會去首先執行 prepare方法。


































