当JSF WebSocket从DOM中移除时,它的客户端行为是什么?



我有几个面板,每个面板显示一些内容,并且可以显示零个、一个或多个这些面板,如下面的示例所示:

<div jsf:id="contents">
    <ui:fragment rendered="#{aContent.rendered}">
        <h:form>
            <o:socket channel="a-channel" onmessage"onAMessage"/>
            <o:commandScript name="onAMessage"
                             actionListener=#{aContent.update()}"
                             render=":aComponent"/>
        </h:form>
        <my:aComponent id="aComponent" />
    </ui:fragment>
    <ui:fragment rendered="#{bContent.rendered}">
        <h:form>
            <o:socket channel="b-channel" onmessage"onBMessage"/>
            <o:commandScript name="onBMessage"
                             actionListener=#{bContent.update()}"
                             render=":bComponent"/>
        </h:form>
        <my:bComponent id="bComponent" />
    </ui:fragment>
</div>

我想知道发生了什么,客户端web套接字当这些UI片段之一被删除后,从DOM的封闭元素的AJAX更新。

web套接字是否关闭?我应该考虑另一种方法吗?

基于当前实现的方式,它将继续运行。您需要重复connected属性中的条件。

<ui:fragment rendered="#{aContent.rendered}">
     <o:socket ... connected="#{aContent.rendered}" />

当我计划为<o:socket>添加<f:ajax>支持时,这可能会得到改进。

另一方面,您的代码片段是非dry的。尝试限制只有1套接字+commandScript组合,它根据推送消息的内容动态地完成工作。另请参阅文档中的通道设计提示部分。

相关内容

  • 没有找到相关文章

最新更新