2011-11-18 82 views
5

我正在實施一些對話,需要一個公共輪詢從服務器獲取新值。 我想使用p:poll,但不幸的是我不能停止它。 我在用戶單擊一個對話框中的按鈕時開始投票,並嘗試在用戶單擊子對話框中的某個按鈕時停止投票。這是代碼我真的用來啓動和停止投票:無法停止primefaces輪詢

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

我與'民意調查'組件有類似的問題(谷歌發送我在這裏)。據我所知,你的標記有兩個問題。我正在使用Primefaces 3.0M4

問題1

使用<p:poll clientVar="myPoll"/>將創建使用window.myPoll訪問的javascript對象。如果包含表單被重新渲染(請參閱您的'更新'屬性),此屬性將被覆蓋。問題在於使用'window.setInterval'。如果在更換前停止輪詢,則此間隔丟失。

解決方案:

  1. 您可以創建只包含輪詢組件的頂級<form>
  2. onclick="pollQtdDisponivelCarregamento.start(); return false;"阻止將表單發送到服務器。 (我懷疑這是你的意圖)

問題2

poll.start()不檢查它是否已經在運行。調用兩次將導致另一個間隔被調度。第一個的 id丟失,但它仍然存在向您的服務器發送請求。嘗試快速點擊「第一個對話框」中的按鈕。

解決方案:

檢查它是否已經通過調用poll.isActive()首先運行。

+0

順便說一句。你寫道:「當我用Firebug分解JavaScript執行時」。但是哪裏? – MartinK