我正在实现一些对话框,这些对话框需要进行公共(public)调查才能从服务器获取新值。
我正在尝试使用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执行时,民意调查正确停止,但是当我不这样做时,民意调查就不会停止。
有人知道我该如何解决?
最佳答案
我在“投票”组件中遇到了类似的问题(谷歌在此向我发送了邮件)。据我所知,您的标记存在两个问题。我正在使用Primefaces 3.0M4。
问题1
使用<p:poll clientVar="myPoll"/>
将创建一个可使用window.myPoll
访问的javascript对象。如果包含表单被重新呈现(请参见“update”属性),则此属性将被覆盖。问题是在引擎盖下使用“window.setInterval”。如果在更换蜂之前不停止轮询器,则会丢失此间隔。
解:
<form>
。 onclick="pollQtdDisponivelCarregamento.start(); return false;"
阻止将表单发送到服务器。 (我怀疑这是您的意图)问题2
poll.start()
不会检查它是否已经在运行。两次调用将导致安排另一个间隔。第一个ID丢失了,但仍在向服务器发送请求。尝试快速单击“第一个对话框”中的按钮。解:
通过首先调用
poll.isActive()
来检查它是否已经在运行。