我有一個應用程序,它顯示了p:DataTable中的一些數據...這個表可以被很多用戶訪問。當一個用戶修改表中的一條記錄(創建,編輯,刪除)時,這個動作被通知給一個@ApplicationScoped ManagedBean,通知所有其他會話(由其他用戶打開),表中的項目被更改,然後它必須從數據庫重新加載。 正如你可以看到這是一個通知,該項目改變了所有的會話控制器,如何通過多個會話顯示消息? JSF 2.1和Primefaces 3.1
/**
* @author Simone Rondelli
*/
@ManagedBean(name="singleton")
@ApplicationScoped
public class SingletonBean {
private int count;
private HashMap<Class, List<AbstractController>> sessions;
public SingletonBean() {
sessions = new HashMap<Class, List<AbstractController>>();
}
public void addSession(AbstractController session, Class c) {
List<AbstractController> sessionList = sessions.get(c);
if(sessionList == null)
sessionList = new ArrayList<AbstractController>();
sessionList.add(session);
sessions.put(c, sessionList);
}
public void notifyItemsChanged(Class type) {
for(AbstractController a : sessions.get(type)) {
a.prepareList();
a.addWarningMessage("Attenzione i record sono stati modificati!!");
}
}
}
這是在一個AbstractController的代碼,「嘗試」,以示消息
public void addWarningMessage(String msg) {
//JsfUtil.addWarningMessage(msg);
FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_WARN, msg, msg);
FacesContext.getCurrentInstance().addMessage(null, facesMsg);
}
如果按f5,在任何其他頁面中顯示新記錄...但是我希望將這些消息發送到所有其他會話...現在,使用我的代碼,消息顯示在修改完成的頁面中,很多次打開的會話數量...所以如果我有3個會話與3個用戶,其中一個在表中做了一些改變,他會在他的頁面看到3條消息,含有其他用戶看不到任何東西。
- 如何將消息發送給所有會話?
爲什麼不直接使用請求/視圖範圍的bean來存儲數據並將該高速緩存作業委託給持久層(JPA等)? – BalusC 2012-03-10 02:45:33