我想知道是否可以观察具有多个JSF 2.0会话范围的支持bean的CDI事件。我认为我可以通过观察事件将事件/数据推送到多个会话。在会话范围内的JSF支持bean中观察到CDI事件
我已经设置了一个小测试,允许用户使用页面上的按钮触发事件(这与绑定到实际触发事件的会话作用域支持bean中的方法相关联)。我认为,如果我打开两个不同的浏览器,则会创建两个会话,并且该事件会通知每个会话作用域支持bean。
但是,当运行我的小测试并单击按钮在其中一个浏览器上触发事件时,我看到该事件仅通知会话作用域bean中的一个。它只通知事件被触发的bean(即 - 如果我单击浏览器1中的按钮,会通知在浏览器1中支持会话的会话作用域bean,如果我单击浏览器2中的按钮,浏览器2被通知)。
我的印象是事件会通知所有的bean实例。但是,这似乎并非如此。我应该能够做到这一点吗?我只是有东西安装错了吗?
UPDATE显示我的代码如下所示:
jsfpage.xhtml的片段来触发一个事件,并显示会话范围的数据:
<h:form> <h:outputText value="#{BackingBean.property}" /> <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" /> </h:form>
会话 - 接受事件的豆子:
@Named @SessionScoped public class BackingBean implements Serializable { private String property; public String getProperty() { return property } public void listenForChange(@Observes EventObj event) { logger.log(Level.INFO, "Event received"); property = event.toString(); } }
一种应用范围的bean触发事件:
@Named @ApplicationScoped public class EventFirer implements Serializable { @Inject private Event events; public String fireEvent() { logger.log(Level.INFO, "Event fired"); events.fire(new EventObj()); return null; } }
你应该添加你的代码,船长。 – 2010-12-19 07:27:59
你有没有找到解决方案?我正在尝试做同样的事情,并希望将数据推送到所有'@ SessionScoped' bean。 – Reitffunk 2014-08-27 02:07:57