由Spring管理的Struts2 fielderror信息重複累加問題

今天在修改一個遺留項目的時候,登陸頁面上的用戶名和fielderror等信息在關閉留言器後從新打開,還存在,排除了緩存的問題後,覺得是session的問題,用struts2作了一個fielderror的小demo發現頁面每次關閉後都會清空fielderror的值,無須要手動在action中加入clearErrorsAndMessages(),後來查閱了資料後解決了問題,原來是spring整合strtus2的問題:html

 

【資料】spring

struts2和spring的一些特色:
1) Struts2 會對每個請求,產生一個Action的實例來處理.緩存

2) Spring的Ioc容器管理的bean默認是單實例的.
當Struts2與Spring整合後,由spring來管理Struts2的Action,會遇到什麼問題 ?如何解決 ?session

 


Struts2與Spring整合後, 由spring來管理Struts2的Action,   bean默認是單實例有狀況下,會有以下問題:多線程

1) Action是單例,其中的FieldError,actionerror中的錯誤信息 會累加, 即便再次輸入了正確的信息,也過不了驗證.ide

2) Struts2的Action是有狀態的,他有本身的成員屬性, 因此在多線程下,會有問題.spa

 

如何解決?prototype

 
方案一: 就是不用單例, spring中bean的做用域設爲prototype,每一個請求對應一個實例.
方案二: spring中bean的做用域設爲session ,每一個session對應一個實例,解決了多線程問題。再寫一個攔截器,  清空線程

           FieldError與actionerrorhtm

  1. public class ClearFieldErrorInterceptor extends AbstractInterceptor {     
  2.      
  3. @Override     
  4. public String intercept(ActionInvocation invocation) throws Exception {     
  5. ActionSupport actionSupport = (ActionSupport)invocation.getAction();     
  6. actionSupport.clearErrorsAndMessages();     
  7. String resultCode = invocation.invoke();     
  8. return resultCode;     
  9. }   
  10. 轉自: http://hi.baidu.com/%BF%AA%CB%B3/blog/item/c09aca061884acc37a89475a.html
相關文章
相關標籤/搜索