2013-07-25 7 views
0

유휴 상태 일 때 클라이언트에서 datatable을 자동으로 업데이트하려고합니다. 나는 Primefaces 3.5를 글래스 피시와 함께 사용하고 있으며 내 아이디어는 다음과 같습니다.유휴 상태 일 때 주기적 업데이트

나는 콩에서 변수가 boolean autoUpdate입니다. 그리고 사용자는 자동 업데이트를 켜거나 끌 수 있습니다.

두 구성 요소를 만들었습니다 : p:pollp:idleMonitor. idleMonitor

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

이 부분은 괜찮 업데이트를 트리거하는 두 개의 이벤트가 있습니다. 문제는 idleMonitorautoUpdateFalse으로 설정하면 어떻게 비활성화 할 수 있습니까? 내가

<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를 비활성화하는 방법이 있습니까? 유휴 사용자를위한 선택적 정기 업데이트를위한 더 나은 솔루션은 무엇입니까?

+0

그래서 유휴 모니터를 원하지만 단 한번만 원하십니까? 사용자가 두 번째로 유휴 상태 일 때 해당 옵션을 원하지 않습니까? –

+0

아니요, 사용자가 유휴 상태가 될 때마다 유휴 모니터를 원합니다. 하지만'autoUpdate'가'True'로 설정된 경우에만 가능합니다. 즉, 페이지를 다시로드하지 않고 세션 중에 'True'와 'False'사이를 전환 할 수 있습니다. – tvazac

+0

흠, h : panelGroup 대신 p : outputPanel을 사용해 보셨습니까? 우선 하나의 하모니가 주관적인 인식입니다. –

답변

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 (remoteCommand와 예 든) 자동 업데이트 업데이트 JS 변수를 유지 :

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

해결책 3 : primefaces idleMonitor 위젯에는 유휴 모니터링을 중지하는 stop() 기능이 있습니다.