p: опрос остановлен, но все еще запускает сетевой вызов

#jsf #primefaces #backing-beans

#jsf #первичные #резервные компоненты

Вопрос:

Я должен остановить и запустить p:poll в JSF, используя некоторые условия… Я могу сделать это, поместив опрос в panelgrid и отрисовав panelGrid… Я думал, что это работает, поскольку pollOperationStatus не вызывается после того, как я сделал panelGrid ложным… Когда я показываю его, он также перезапускается.. Но все еще выполняется сетевой вызов; который многое портит; Как с этим справиться?

  <h:form>
    My main form
    </h:form>

        <h:form id="mypollform">

            <p:outputLabel id="currentTime" value="#{myBean.counter}" />
            <h:outputText value="#{myBean.startPoll}" id="counter11" />

            <p:panelGrid rendered="#{myBean.startPoll}">
                <p:poll interval="8" widgetVar="poller" autoStart="true"
                    listener="#{myBean.pollOperationStatus}"
                    update=":#{p:component('newServerID')},:#{p:component('mypollform')}" />
            </p:panelGrid>
        </h:form>
  

Комментарии:

1. То есть вы на самом деле имеете в виду, что вы можете запустить опрос, остановить опрос, но затем он продолжает выполнять сетевые вызовы? И если вы запустите его снова, он выполняет повторяющиеся вызовы?

2. я не запускал снова .. но после остановки есть сетевые вызовы

3. Тогда ваше первоначальное описание было не совсем правильным. Фактически остановка сработала некорректно… Ответ @Selaron — это ваше решение

4. Остановка работает! .. он больше не вызывает слушателя… он просто запускает сетевой запрос…

5. ответ @Selaron — это ваше решение, пожалуйста, сосредоточьтесь на этом и примите ответ, если он сработает

Ответ №1:

В документации Primefaces 7 говорится:

Опрос можно запустить и остановить с помощью клиентского API; Или привязать логическую переменную к stop атрибуту и установить для нее значение false в любое произвольное время.

В вашем случае это было бы в javaScript :

PF('poller').stop(); или PF('poller').start();

Или привяжите boolean свойство bean к stop атрибуту p:poll :

 <p:poll stop="#{myBean.stopPoller}" interval="8" widgetVar="poller" autoStart="true"
                    listener="#{myBean.pollOperationStatus}"
                    update=":#{p:component('newServerID')} :#{p:component('mypollform')}" />
  

Также помните, что идентификаторы компонентов в update атрибуте разделяются пробелом, а не запятой.

Комментарии:

1. Из документации, на которую вы ссылаетесь: «Можно указать несколько компонентов для обновления, предоставив список идентификаторов, разделенных запятой, пробелом или даже обоими». Основные возможности ajax здесь отличаются от базового JSF, но лучше придерживаться базового JSF. (не по теме: почти 3000 представителей … близкие голоса приближаются)

2. Черт возьми, я так следил за этим … спасибо. (не по теме: И да, я работаю над этим ^^)