很多人都在問,struts2驗(yàn)證失敗后select中l(wèi)ist數(shù)據(jù)丟失的問題
could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name}。
其實(shí)這個問題很簡單,大多數(shù)人,是通過action跳轉(zhuǎn)到數(shù)據(jù)編輯頁面的,這樣做的目的是方便把數(shù)據(jù)庫里的數(shù)據(jù),反顯到頁面。同時也可以通過該action 將select中的列表數(shù)據(jù)從數(shù)據(jù)庫中取出,傳遞給頁面。但是,這里出現(xiàn)一個問題,那就是在struts2驗(yàn)證失敗后返回input的時候,頁面不是通過該action的該方法傳遞回去的(實(shí)際上是通過DefaultWorkflowInterceptor攔截器攔截回去的),所以這個時候頁面就找不到sleect的數(shù)據(jù)集合,從而報錯。有的人也許會問,修改input的type為redirect,直接掉轉(zhuǎn)到那個action上去,呵呵,這種方法雖然可以保證得到select的數(shù)據(jù)集合,因?yàn)閞edirect的性質(zhì),我們丟失了之前驗(yàn)證的錯誤信息。所以還是不能解決問題,那么有的人可能說了,那么改用chain就可以了吧,如果改用chain,我們知道,chain是action鏈的掉轉(zhuǎn),執(zhí)行action還是要經(jīng)過攔截器,所以因?yàn)槟銕в序?yàn)證錯誤信息,你還是會被DefaultWorkflowInterceptor攔截器攔截,還是會報錯,而且是chain鏈錯。
其實(shí),可以反一種思路,既然走跳轉(zhuǎn)不成功,我們可不可以在頁面上下功夫呢。其實(shí)我們的select的list能不能不經(jīng)過action而直接得到數(shù)據(jù)呢,是可以的,我們的ognl可以訪問某個對象的某個方法,也可以訪問某個靜態(tài)類的靜態(tài)屬性,靜態(tài)方法。所以我們可以將這些數(shù)據(jù)通過對象方法訪問,也可以通過靜態(tài)類的靜態(tài)方法去訪問,具體怎么做,根據(jù)需要寫就可以了。代碼就不在這里寫了,因?yàn)榉浅:唵巍?