2013-07-25 27 views
0

我想在用戶閒置時自動更新數據表(在客戶端)。我使用的是PrimeFlash 3.5 with glassfish,我的想法如下:Primefaces,空閒時定期更新

我在boolean autoUpdate bean中有變量。用戶可以打開/關閉自動更新。

我創建了兩個組件: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}從未改變。即使我打電話給它,我可以看到在另一個地方變化的變量。

所以,我的問題是:有沒有辦法如何禁用idleMonitor後,它被呈現?或者對於空閒用戶的可選定期更新,更好的解決方案是什麼?

+0

所以你想空閒監視器,但只有一次?當第二次用戶閒置時,你不需要該選項? –

+0

不,我想每次用戶閒置時都需要空閒監視器。但只有當他將'autoUpdate'設置爲'True'。這意味着,他可以在會話期間在「真」和「假」之間切換,而無需重新加載頁面。 – 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> 

溶液2:保持更新上自動更新一個js變量(以某種方式,例如用remoteCommand):

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

解決方案3:primefaces idleMonitor小部件具有stop()函數,該函數停止空閒監視。