相关疑难解决方法(0)

在会话作用域的JSF支持bean中观察CDI事件

我想知道是否有可能观察到多个JSF 2.0会话作用域支持bean的CDI事件.我以为我可以通过观察事件将事件/数据推送到多个会话.

我已经设置了一个小测试,允许用户使用页面上的按钮触发事件(它与会话范围的支持bean中实际触发事件的方法相关联).我认为,如果我打开两个不同的浏览器,将创建两个会话,并且事件将通知每个会话范围的支持bean.

但是,当运行我的小测试并单击按钮以在其中一个浏览器上触发事件时,我看到该事件仅通知其中一个会话范围的bean.它只通知触发事件的bean(即 - 如果我单击浏览器1中的按钮,则会通知浏览器1中支持会话的会话范围bean,如果我单击浏览器2中的按钮,则支持会话的bean浏览器2被通知).

我的印象是事件会通知所有bean实例.但是,情况似乎并非如此.我能做到吗?我只是设置错误吗?

更新以显示我的代码:

用于触发事件并显示会话范围数据的jsfpage.xhtml片段:

<h:form>
  <h:outputText value="#{BackingBean.property}" />
  <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

接收事件的Session-scoped bean:

@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();
    }
}
Run Code Online (Sandbox Code Playgroud)

用于触发事件的应用程序作用域bean:

@Named
@ApplicationScoped
public class EventFirer implements Serializable {

    @Inject
    private Event<EventObj> events;

    public String fireEvent() {
        logger.log(Level.INFO, "Event fired");
        events.fire(new EventObj());
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

jsf cdi jsf-2

10
推荐指数
1
解决办法
2609
查看次数

CDI 事件,其传播范围

这是我遇到的一个反复出现的问题,我认为 CDI 事件也许可以帮助我,但我不确定。

我有两个用户在一个网站上进行交互,我希望他们共享一个 bean 实例,这样他们就可以共享一个活动。到目前为止,我知道如何做到这一点的唯一方法是将数据推送到数据库,然后使用两个不同的 bean,每个用户一个,不断检查更改。

我的问题是,如果 sessionscoped bean 观察到一个事件,当我触发它时,每个用户的每个 sessionbean 都会得到通知吗?还是只有活动用户的会话 bean?。因为那样我就可以使用观察者来保持两个用户同步的对象。但是我真的不认为这是它的工作方式,因为如果我有一千个会话触发一个事件将导致 1000 次方法调用......

我的另一个解决方案是一个巨大的应用程序范围的 bean,它为两个用户保存活动对象,然后对它所做的任何更改都可以传达给用户,但是,我仍然必须扫描这个对象,我错过了什么吗?

java session cdi

5
推荐指数
1
解决办法
2491
查看次数

@Observes在sessionscoped bean中?

以下情况可能吗?

"SessionService"是一个无状态EJB,它触发一个事件"LoggedInEvent".调用具有观察LoggedInEvent的非静态方法的SessionScoped(Weld)bean"SessionBean",并为该特定用户初始化一些内容.

是否调用了"SessionBean"的正确实例?所有实例都被调用了?我在文档中找不到任何内容.

events cdi java-ee-6 observer-pattern

2
推荐指数
1
解决办法
1432
查看次数

标签 统计

cdi ×3

events ×1

java ×1

java-ee-6 ×1

jsf ×1

jsf-2 ×1

observer-pattern ×1

session ×1