Venkat Raj
Venkat Raj

Reputation: 219

PrimeFaces p:idleMonitor rendered="false" not working

I am developing a project with Primefaces 5.1.

In my project, I used p:idleMonitor, on my Start button click the p:idleMonitor rendered="true" is working .

On my Stop button click the p:idleMonitor rendered="false" not working and the p:idleMonitor is still processing.

Sample Code:

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;
    }
}

Upvotes: 1

Views: 873

Answers (1)

jklee
jklee

Reputation: 2268

A few things you should do differently.

  1. Use <h:form>
  2. Use actionListener by p:commandButton and void methods of your 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: Looks like a bug, here is a workaround:

<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>

Upvotes: 1

Related Questions