我有一個下拉菜單,用戶從中選擇一個項目(在我的案例中他正在處理的項目),網頁顯示的大部分數據取決於該選擇。所以我有幾個視圖範圍的bean調用EJB bean,這些bean執行依賴於所選項目的數據庫查詢。Observer和JSF ManagedBean
我想要緩存大部分數據以減少數據庫查詢,但是當用戶更改項目時,必須通知其他bean發生了更改並且需要獲取新數據。
於是我有了一個想法:
projectChangeManager(會話範圍的託管bean),節省了選擇哪個項目,通知它的訂戶項目變更時。在清理觀察者的地方實施了@PreDestory方法。
項目觀察者(視圖作用域託管的bean),從基於項目選擇的EJB獲取數據,具有從EJB獲取新數據的onProjectChange()方法。在調用projectChangeManager.detach(this)以取消訂閱projectChangeManager時實施了@PreDestory方法。
在JSF中這是否合理?或者更好的是不實施觀察者模式,但只是當用戶更改項目時,我獲取所有緩存的數據並將其保存在會話bean中,然後在ViewScoped bean中,我只是從SessionScoped bean訪問該數據?或者,還有更好的方法?