Не могу остановить опрос простых лиц - PullRequest
5 голосов
/ 18 ноября 2011

Я реализую некоторые диалоги, которые требуют общего опроса для получения свежих значений с сервера.Я пытаюсь использовать 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();" />

Одна вещь, которую я не могу понятьэто: когда я прекращаю выполнение javascript с помощью отладки Firebug, опрос останавливается правильно, но когда я этого не делаю, он просто не останавливается.Кто-то знает, как я могу решить это ??

1 Ответ

6 голосов
/ 17 февраля 2012

У меня были похожие проблемы с компонентом 'poll' (Google отправил меня сюда). Насколько я могу судить, есть две проблемы с вашей разметкой. Я использовал Primefaces 3.0M4 .

Задача 1

Использование <p:poll clientVar="myPoll"/> создаст объект javascript, доступный с использованием window.myPoll. Если содержащаяся форма перерисовывается (см. Ваш атрибут update), это свойство перезаписывается. Проблема в том, что использует «window.setInterval» под капотом. Если опросник не был остановлен перед заменой, этот интервал теряется.

Решение:

  1. Вы можете создать верхний уровень <form>, содержащий только компонент опроса.
  2. onclick="pollQtdDisponivelCarregamento.start(); return false;" запрещает отправку формы на сервер. (Я сомневаюсь, что это твое намерение)

Задача 2

poll.start() не проверяет, работает ли он уже. Двойной вызов приведет к планированию следующего интервала . Первый id потерян, но он все еще отправляет запросы на ваш сервер. Попробуйте быстро нажать кнопку в «первом диалоговом окне».

Решение:

Проверьте, запущен ли он, сначала набрав poll.isActive().

...