PrimeFaces p:idleMonitor rendered =“false”无法正常工作

时间:2017-04-04 05:48:41

标签: jsf primefaces

我正在使用Primefaces 5.1开发一个项目。

在我的项目中,我使用p:idleMonitor,在我的“开始”按钮上点击p:idleMonitor rendered="true"正在运行。

在我的停止按钮上,点击p:idleMonitor rendered="false"无效,p:idleMonitor仍在处理中。

示例代码:

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

1 个答案:

答案 0 :(得分:1)

你应该做的一些事情不同。

  1. 使用<h:form>
  2. 使用p:commandButton的actionListener和bean的void方法
  3. <强> 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>
    

    <强>豆

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

    <强>更新 看起来像一个错误,这是一个解决方法:

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