JSF的Managed Bean的生命范圍,一般人都知道:
request 范圍,意味著這個Bean在請求結(jié)束之后,就結(jié)束了生命周期。而Session范圍,意味著這個Bean在Session的結(jié)束生命時,他才結(jié)束生命。
舉個例子:Request范圍內(nèi)的Bean,假設(shè)在Page1,通過一個Managed Bean的動作方法,到了Page2,那么刷新Page2,如果Page2中沒有和Page1中對數(shù)據(jù)的類似處理,那么Page2中的數(shù)據(jù)就會丟失。
Session內(nèi)的bean的話,只要Session不結(jié)束生命,Page上綁定的數(shù)據(jù)就不會消失。
題外話:ASP.net2.0的ViewState做的很好,它把狀態(tài)記錄在客戶端,但效果類似JSF的Session,比Session的好處是:不依賴與Session的生命周期。
在用JSF的Managed
Bean的Request和Session時,特別注意數(shù)據(jù)的綁定。Request范圍的話,在每次向Server發(fā)請求時,都會綁定Managed
Bean中定義的數(shù)據(jù)。但是Session范圍的話,僅僅在Session范圍內(nèi)讀寫數(shù)據(jù),不會在重新綁定Managed Bean中定義的數(shù)據(jù)。