0

ユーザーがアイドル状態のときに(クライアントで)データテーブルを自動更新したい。私はグラスフィッシュでPrimefaces 3.5を使用していますが、私の考えは次のとおりです。

私はboolean autoUpdate豆に変数を持っています。また、ユーザーは自動更新のオン/オフを切り替えることができます。

p:pollとの 2 つのコンポーネントを作成しましp:idleMonitorた。

にはidleMonitor、更新をトリガーする 2 つのイベントがあります。

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

この部分は大丈夫です。問題は、 が?に設定されているidleMonitor場合に無効にする方法です。私がする時autoUpdateFalse

<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を無効にする方法はありますか? または、アイドル状態のユーザー向けのオプションの定期的な更新のより良い解決策は何ですか?

4

1 に答える 1

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 : autoUpdate で js 変数を更新したままにします (何らかの方法で、たとえば remoteCommand を使用):

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

解決策 3 : primefaces idleMonitor ウィジェットには、アイドル監視を停止する stop() 関数があります。

于 2013-10-28T10:45:01.060 に答える