我有一个下拉菜单,用户从中选择一个项目(在我的案例中他正在处理的项目),网页显示的大部分数据取决于该选择。所以我有几个视图范围的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访问该数据?或者,还有更好的方法?