2013-07-25 9 views
0

Я хочу автоматически обновлять datatable (на клиенте), когда пользователь не работает. Я использую Primefaces 3.5 со стеклянными фишками, и моя идея была следующая:. Прайсы, периодическое обновление при простоя

У меня есть boolean autoUpdate переменная в bean. И пользователь может включить/выключить автоматическое обновление.

Я создал два компонента: p:poll и p:idleMonitor.

idleMonitor имеет два события, которые вызывают обновление

<p:ajax event="idle" oncomplete="myPoll.start();" /> 
<p:ajax event="active" oncomplete="myPoll.stop();" /> 

Эта часть в порядке. Проблема в том, как отключить idleMonitor, когда autoUpdate установлен в False? Когда я

<h:panelGroup id="updatePanel" rendered="#{cc.attrs.bean.autoUpdate}"> 
.... 
</h:panelGroup> 

это работает только если я начну с autoUpdate = false и я могу переключить режим только один раз. Как только он отображается, он не может быть изменен. Я также пробовал

<p:ajax event="idle" oncomplete="#{cc.attrs.bean.autoUpdate ? 'myPoll.start();' : ''}" /> 

но это не сработало ни один. #{cc.attrs.bean.autoUpdate} не изменяется. Даже я вызываю upadte на нем, и я вижу переменную, измененную в другом месте.

Итак, мой вопрос: есть ли способ отключить idleMonitor после его рендеринга? Или что является лучшим решением для факультативного периодического обновления для пользователя idle?

+0

Значит, вам нужен монитор на холостом ходу, но только один раз? Вы не хотите, чтобы этот параметр, когда второй пользователь простаивает? –

+0

Нет, я хочу, чтобы Idle контролировал каждый раз, когда пользователь простаивает. Но только если у него есть 'autoUpdate', устанавливается' True'. Это означает, что он может переключаться между «True» и «False» во время сеанса без перезагрузки страницы. – tvazac

+0

Хм, вы пробовали p: outputPanel вместо h: panelGroup? Первая гармония лучше - мое субъективное восприятие. –

ответ

0

Ваша переменная autoUpdate оценивается только по адресу Время визуализации. (при загрузке страницы)

#{cc.attrs.bean.autoUpdate} 

Именно поэтому js не знает о своих модификациях.

Решение 1, повторно вызывать код JS:

<p:ajax event="idle" update="afterIdle" /> 
<h:panelGroup id="afterIdle"> 
<h:outputScript> 
    if ('#{cc.attrs.bean.autoUpdate}' == 'true') 
    myPoll.start(); 
</h:outputScript> 
</h:panelGroup> 

Solution 2: сохранить переменную JS обновляется на автообновления (каким-то образом, например, с remoteCommand):

<p:ajax event="idle" oncomplete="myFunction()" /> 
<script type="text/javascript"> 
function myFunction(){ 
    if (jsAutoUpdate) myPoll.start(); 
} 
</script> 

Решение 3: прайс-лист idleMonitor виджет имеет функцию stop(), которая останавливает мониторинг бездействия.

 Смежные вопросы

  • Нет связанных вопросов^_^