0

私のコード:

<p:socket channel="/allposts/#{uview.user.uid}">
 <p:ajax event="message" async="true" listener="#{uview.go}" update="xout"/>
</p:socket>

#1。uview は、ビュー スコープの Bean を参照します。更新を含むすべてが、リスナーメソッドを除いて機能します。リスナー メソッドが呼び出されることはありません。リスナーの値を存在しないメソッドに変更しても、エラーは報告されません。なぜそれが機能しないのですか?

次のコード スニペット [動的 ID を含む] で気付いたもう 1 つの点:

<p:socket channel="/allposts/#{uview.user.uid}">
<p:ajax event="message" async="true" listener="#{uview.go}" update="#{uview.user.uid}"/>
</p:socket>

ここでは、指定された ID の ID が見つからないというエラーが報告されます [エラー メッセージに ID が表示されます]。そのIDの要素があっても見つからない。コンテナ参照の問題に名前を付けているわけではありません。

ページ[動的部分]がJSFによってレンダリングされる前でもPrimefaceソケットが初期化されているために発生しているのでしょうか?そのため、動的IDが見つかりませんか???

#2。Pimeface Demo ページから理解したように、JSF でチャット アプリケーションを実装するには、動的 ID を持つ要素を更新する必要があります。ここでプライムフェイスソケットを実装するのは間違っていますか? よりエレガントに実装する他の方法はありますか?

4

1 に答える 1

4

uview は、ビュー スコープの Bean を参照します。更新を含むすべてが、リスナーメソッドを除いて機能します。リスナー メソッドが呼び出されることはありません。リスナーの値を存在しないメソッドに変更しても、エラーは報告されません。なぜそれが機能しないのですか?

バグです。次の回避策を見つけました: このようなコード

<p:socket channel="/channel">
    <p:ajax event="message"
            listener="#{controller.yourListenerMethod}"
            update=":form:table" />
</p:socket>

と置換する:

<p:socket onMessage="handleMessage" channel="/channel" />
<script type="text/javascript">
    function handleMessage(data) {
        updateWidgets();
    }
</script>

<p:remoteCommand name="updateWidgets"
                 actionListener="#{controller.yourListenerMethod}"
                 update=":form:table" />
于 2014-01-16T21:18:11.750 に答える