如何全局通知会话作用域的bean重新加载它们的数据



我有一个会话作用域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;
    }
}

相关内容

  • 没有找到相关文章

最新更新