【问题标题】:Notifying java event to JSF Bean将 java 事件通知给 JSF Bean
【发布时间】:2013-04-09 19:37:40
【问题描述】:

当java程序接收到异步消息时,有什么方法可以通知jsf/spring bean?而且,java程序是一个Java BayeuxClient(Cometd)作为pojo。程序成功接收元频道和订阅频道的消息,如下所示。

@Listener(Channel.META_CONNECT)
    public void metaConnect(Message message) {
    boolean connected = message.isSuccessful();
            ...
    }

@Subscription("/notification")
    public void subscribeUpdates(Message message) {

    String updates=message.getDataAsMap().toString()    
        .....   
    }

FacesContext 在这些方法中不可用,即使 bean 被注释为 (@Component @Scope("session") 用于 jsf/spring 集成。无法注入 bean,因为 facesContext 不可用。我们如何注入 jsf bean 或通知spring bean 来自上述方法?

【问题讨论】:

    标签: java spring jsf cometd bayeux


    【解决方案1】:

    看看CometD-Spring integration

    您可以在 Spring 配置文件中定义 CometD 服务(或对其进行注释),并将依赖项与通常的 Spring 机制联系起来。

    我不建议直接访问FacesContext,因为这会将您绑定到 HTTP 传输,并且您将无法使用 WebSocket 传输,这会给您带来性能提升。

    我建议您将消息传递逻辑重构为与传输无关的 POJO,即不依赖于 HttpServletRequestHttpSessionFacesContext 等类。

    【讨论】:

    • 谢谢。我必须在网页上推送两个变量(网络状态和同步状态)。我能够使用 Faces Context 中的 ICEfaces Ajax Push 进行推送。我可以根据上面 metaConnect 方法收到的消息确定网络状态。网络状态设置为 true 将在与远程服务器重新连接后自动启动同步过程。本地服务器将充当 Java Bayeux 客户端。问题是将网络状态和同步过程的结果推送到网页。我使用带注释的客户端服务作为 Spring Bean 并且能够接收订阅的消息。
    猜你喜欢
    • 2011-05-16
    • 2012-08-10
    • 2011-10-09
    • 2014-04-01
    • 2015-10-06
    • 2023-01-09
    • 1970-01-01
    • 2012-08-17
    • 2011-05-21
    相关资源
    最近更新 更多