2011-08-29 77 views
2

我有一個支持我的web-app的Session Scoped託管bean。在這個網絡應用程序中,我希望能夠讓用戶執行包含用戶標識和日期的URL。然後這將觸發託管bean中的方法,並將web-app跳轉到該用戶標識和日期。使用URL參數調用JSF Managed Bean方法

簡單的答案就是將代碼從URL中提取參數提供給託管bean的構造函數。但問題在於它是Session Sessiond,所以構造函數只在初始加載時調用。如果用戶打開Web應用程序並對其進行操作,然後使用新參數執行URL,則無法調用構造函數。

是否有某種方式可以在每次執行應用程序URL時(每次加載頁面時)都可以在受管Bean上執行方法,而不管會話狀態如何?

回答

2

把這個工作變成一個被視圖調用的getter是可能的,但是不,你真的不想擁有它。會話範圍的bean在同一會話中的所有瀏覽器窗口/選項卡之間共享。窗口/選項卡中的每個更改都會影響所有其他窗口/選項卡。這可能會導致「wtf?」這對於您網站的一般用戶體驗(用戶體驗)不利。

如果您想攔截GET請求,或者如果您使用的是JSF 2.0,那麼您確實需要將該bean放入請求範圍,如果要在初始化後的後續POST請求中維護狀態GET請求。會話作用域bean用於保存會話作用域數據,例如登錄用戶,其偏好等等。它不適用於請求範圍數據,如請求參數等。