【问题标题】:Primefaces, periodical update when idlePrimefaces,空闲时定期更新
【发布时间】:2013-07-25 12:49:24
【问题描述】:

我想在用户空闲时自动更新数据表(在客户端)。我将 Primefaces 3.5 与 glassfish 一起使用,我的想法如下:

我在 bean 中有 boolean autoUpdate 变量。用户可以打开/关闭自动更新。

我创建了两个组件:p:pollp:idleMonitor

idleMonitor 有两个事件,触发更新

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

这部分没问题。问题是,当autoUpdate 设置为False 时,如何禁用idleMonitor?当我这样做时

<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?或者对于空闲用户的可选定期更新有什么更好的解决方案?

【问题讨论】:

  • 所以你想要空闲监视器,但只有一次?当第二次用户空闲时,您不希望该选项?
  • 不,我希望每次用户空闲时都有空闲监视器。但前提是他将autoUpdate 设置为True。这意味着,他可以在会话期间在TrueFalse 之间切换而无需重新加载页面。
  • 嗯,你试过用 p:outputPanel 代替 h:panelGroup 吗?第一个更和谐的是我的主观感受。

标签: java jsf primefaces auto-update ajax-polling


【解决方案1】:

您的 autoUpdate 变量仅在渲染时间进行评估。 (在页面加载时)

#{cc.attrs.bean.autoUpdate}

这就是为什么 js 不知道它的修改。

方案一,重新渲染一段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>

解决方案 2:在 autoUpdate 上保持 js 变量的更新(不知何故,例如使用 remoteCommand):

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

解决方案 3:primefaces idleMonitor 小部件有一个 stop() 函数,可以停止空闲监控。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多