2011-11-18 7 views
5

私はサーバーから新しい値を取得するために共通のポーリングを必要とするいくつかのダイアログを実装しています。 私はp:pollを使用しようとしていますが、残念ながら私はそれをやめることはできません。 ユーザーが1つのダイアログでボタンをクリックしたときにポーリングを開始し、ユーザーが子ダイアログのボタンをクリックしたときにポーリングを停止しようとします。これは世論調査を開始および停止するために使用してI`mコードです:プライムフェンスのポーリングを停止できません

firstDialog:

<p:poll autoStart="false" widgetVar="pollQtdDisponivelCarregamento" immediate="true" 
    update="labelQuantidadeDisponivelCarregamento labelQuantidadeDisponivelItem" 
    listener="#{atualizadorQuantidadeDisponivelProduto.atualizarQuantidadeDisponivel(modeloPopupCarregarProduto.produtoSelecionado)}" /> 
<p:commandButton action="#{controladorPopupCarregarProduto.abrir}" 
    value="#{vendaMsg['popup.pre_venda.botao.adicionar_produto']}" 
    title="#{vendaMsg['popup.pre_venda.botao.adicionar_produto.descricao']}" 
    update="@form" onclick="pollQtdDisponivelCarregamento.start()" /> 

childDialog:私は理解できない

<p:commandButton value="OK" style="float:right" immediate="true" 
    action="#{controladorPopup.fechar}" update="@form" 
    onsuccess="pollQtdDisponivelCarregamento.stop();" /> 

一つのことがある:私はJavaScriptを破るときFirebugデバッグを使用して実行すると、ポーリングは正しく停止しますが、これを行わないと停止しません。 誰かがこれを解決する方法を知っていますか?

答えて

6

私は 'poll'コンポーネント(googleが私に送ってくれました)に同様の問題がありました。私の知る限り、マークアップには2つの問題があります。私はPrimefaces 3.0M4を使っていました。

問題1

window.myPollを使用してアクセスするJavaScriptオブジェクトを作成します<p:poll clientVar="myPoll"/>を使用します。含まれているフォームが再レンダリングされた場合( 'update'属性を参照)、このプロパティは上書きされます。問題は、フードの下で 'window.setInterval'を使用することです。ポーラーが交換される前に停止しない場合、この間隔は失われます。

ソリューション:

  1. あなただけのポール成分を含むトップレベル<form>を作成することができます。
  2. onclick="pollQtdDisponivelCarregamento.start(); return false;"は、フォームがサーバーに送信されないようにします。それはすでに実行している場合には(私はこれがあなたの意図である疑い)

問題2

poll.start()はチェックしません。 2回呼び出すと、の別の間隔がスケジュールされます。最初のものは idですが、依然としてサーバーに要求が送信されています。 '最初のダイアログ'のボタンをすばやくクリックしてみてください。

ソリューション:それはすでに最初poll.isActive()を呼び出して実行している場合

チェック。

+0

Btw。あなたは "Firebugを使ってjavascriptの実行を中断したとき"と書きました。しかしここで? – MartinK

関連する問題