我有一个会话作用域bean,它存储所选员工。一个始终可见的输入提供了随时更改所选员工的能力。
因为有很多可调的设置(和视图),一对会话作用域的bean保持他们的@PostConstruct加载的数据在成员变量中,我不想在视图打开时从存储中重新加载这些数据(@ViewScoped)。
我不知道如何通知所有活动bean关于新选择的员工。
欢迎任何提示…;)
我使用Tomcat 8, Primefaces 5, JSF 2.2
由于不想在每次加载页面时都重新加载此数据,因此至少可以搜索所选员工,如果相同,则进行更新。如果没有,你不需要做任何事情。
请注意:这个解决方案是一个解决方案一个糟糕的设计!
设计的不足是将数据缓存在会话作用域的backing bean中,而不是在后端使用第二级JPA缓存(参见BalusC对问题的评论)。
变通方法:
我的会话范围SessionManager保留selectedPerson。在更改此选择时,将更新时间戳:
@Named
@SessionScoped
public class SessionManager implements Serializable {
private Date lastUpdateSelectedPerson; // +getter
public void setSelectedPerson(Person selectedPerson) {
this.selectedPerson = selectedPerson;
lastUpdateSelectedPerson = new Date();
}
}
因此,其他备份bean可以将此时间戳与本地更新时间戳进行比较:
@Named
@SessionScoped
public class MyData implements Serializable {
@Inject SessionManager sessionManager;
private Date lastUpdateData;
private void updateData() {
// update data
lastUpdateData = sessionManager.getLastUpdateSelectedPerson();
}
public List<Data> getData() {
if (sessionManager.getLastUpdateSelectedPerson().compareTo(lastUpdateData) > 0)
updateData;
return data;
}
}