2017-04-04 4 views
1

Ich entwickle ein Projekt mit Primefaces 5.1.PrimeFaces p: idleMonitor gerendert = "false" funktioniert nicht

In meinem Projekt habe ich p:idleMonitor verwendet, auf meiner Start-Taste klicken Sie auf p:idleMonitor rendered="true" funktioniert.

Auf meiner Stop-Taste klicken Sie auf die p:idleMonitor rendered="false" funktioniert nicht und die p:idleMonitor wird noch verarbeitet.

Beispielcode:

index.xhtml

<p:panel id="mainPanelId"> 

    <p:commandButton value="Start" update="mainPanelId" action="{Sample.start}"/> 

    <p:commandButton value="Stop" update="mainPanelId" action="#{Sample.stop}"/> 

    <p:idleMonitor timeout="5000" rendered="#{Sample.idleRendered}"> 
      <p:ajax event="idle" oncomplete="PF('dialogId').show();"/> 
      <p:ajax event="active" oncomplete="PF('dialogId').hide();"/> 
    </p:idleMonitor> 

    <p:dialog id="dialogId" widgetVar="dialogId" header="Idle">  
     <p:outputLabel value="Idle Mode Actived!"/> 
    </p:dialog> 

</p:panel> 

Sample.java

class Sample 
{ 
    private boolean idleRendered; 

    public String start() 
    { 
     idleRendered = true; 
     return null; 
    } 

    public String stop() 
    { 
     idleRendered = false; 
     return null; 
    } 
} 
+0

Versuchte PF 6.0 oder sogar 6.1RC2? und eine andere Problemumgehung ist die Verwendung einer WidgetVar auf dem IdleMonitor und Aufruf der 'Pause()' Funktion darauf – Kukeltje

Antwort

1

Ein paar Dinge, die Sie anders machen sollten.

  1. Verwenden <h:form>
  2. Verwenden von Action p:commandButton und nichtig Methoden des Bean

XHTML

<h:form> 
    <p:panel id="mainPanelId"> 
     <p:commandButton value="Start" update="mainPanelId" 
      actionListener="#{Sample.start}" /> 

     <p:commandButton value="Stop" update="mainPanelId" 
      actionListener="#{Sample.stop}" /> 

     <h:outputText value="#{Sample.idleRendered}" /> 
     <p:idleMonitor timeout="5000" rendered="#{Sample.idleRendered}"> 
      <p:ajax event="idle" oncomplete="PF('dialogId').show();" /> 
      <p:ajax event="active" oncomplete="PF('dialogId').hide();" /> 
     </p:idleMonitor> 

     <p:dialog id="dialogId" widgetVar="dialogId" header="Idle"> 
      <p:outputLabel value="Idle Mode Actived!" /> 
     </p:dialog> 
    </p:panel> 
</h:form> 

Bean

@Named("Sample") 
@SessionScoped 
public class Sample implements Serializable { 

    private boolean idleRendered = true; 

    public void start() { 
     idleRendered = true; 
    } 

    public void stop() { 
     idleRendered = false; 
    } 

    public boolean isIdleRendered() { 
     return idleRendered; 
    } 

    public void setIdleRendered(boolean idleRendered) { 
     this.idleRendered = idleRendered; 
    } 

} 

Update: Sieht aus wie ein Fehler, hier eine Abhilfe:

<p:outputPanel rendered="#{Sample.idleRendered}"> 
    <p:idleMonitor timeout="5000"> 
     <p:ajax event="idle" oncomplete="PF('dialogId').show();" /> 
     <p:ajax event="active" oncomplete="PF('dialogId').hide();" /> 
    </p:idleMonitor> 
</p:outputPanel> 
+0

Ich habe h: form und actionListener in p: commandButton auch, aber immer noch nicht das Problem gelöst. –

+0

Der ändert sich? – jklee

+0

Ja, der wird beim Klicken auf die Schaltfläche "start and stop" dynamisch geändert, aber die idleMonitor-Komponente wird nicht gestoppt, wenn auf die Schaltfläche "stop" geklickt wird. –

Verwandte Themen