我正在实现一些需要公共轮询才能从服务器获取新值的对话框。我正在尝试使用p:poll,但不幸的是我无法阻止它。当用户在一个对话框中单击按钮时,我开始投票,并尝试在用户单击子对话框中的按钮时停止投票。这是我用来开始和停止投票的代码:
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();" />
我不能理解的一件事是:当我使用Firebug调试中断javascript执行时,投票正确停止,但当我不这样做时,它只是不停止。有人知道我怎么解决这个问题吗??
我有类似的问题与'poll'组件(谷歌送我到这里)。据我所知,你们的标价有两个问题。我使用的是Primefaces 3.0M4。
问题1
使用<p:poll clientVar="myPoll"/>
将创建一个可以使用window.myPoll
访问的javascript对象。如果包含的表单被重新呈现(参见您的'update'属性),此属性将被覆盖。问题是它使用了"窗口"。下面的setInterval。如果轮询器在被替换之前没有停止,则此间隔将丢失。
解决方案:
- 可以创建只包含poll组件的顶级
<form>
。 -
onclick="pollQtdDisponivelCarregamento.start(); return false;"
阻止表单被发送到服务器。(我怀疑这是你的意图)
问题2
poll.start()
不检查它是否已经运行。调用它两次将导致安排另一个间隔。第一个的id丢失了,但它仍然在那里向服务器发送请求。试着快速点击"第一个对话框"中的按钮。
解决方案:
先调用poll.isActive()
检查它是否已经运行