【问题标题】:How can I display a message through multiple sessions? JSF 2.1 & Primefaces 3.1如何通过多个会话显示消息? JSF 2.1 和 Primefaces 3.1
【发布时间】:2012-03-08 12:34:34
【问题描述】:

我有一个在 p:DataTable.... 中显示一些数据的应用程序。许多用户都可以访问这个表。当一个用户修改表中的记录(创建、编辑、删除)时,此操作会通知给@ApplicationScoped ManagedBean,后者会通知所有其他会话(由其他用户打开)表中的项目已更改,然后它必须从数据库重新加载。 如您所见,这是通知所有会话项目已更改的控制器,

/**
 * @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 等)?

标签: session jsf message


【解决方案1】:

我认为你应该检查 Primefaces Push ,看看那里的例子......

PrimePush

或者你可以试试 Ajax Poll AJAX Poll

这里是Push in Glassfish question 的参考

【讨论】:

  • 谢谢!我正在尝试使用它,但它不起作用..我读过它有很多错误..例如当我调用 RequestContext.getCurrentInstance().push(CHANNEL, msg);应用程序挂起..
  • INMO :它应该通过 push 或 poll 来实现......你应该阅读它们......无论如何,primefaces 都实现了它们(我知道 primeface 推送不是 100%,但仍然有一些请大家使用它..)
  • 问题是推送需要带有 Jersey 而不是 glassfish 的 WebSockets 不起作用....我尝试 primefaces 站点中的示例....但不起作用...
猜你喜欢
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多