2017-04-04 53 views
1

我正在开发一个项目Primefaces 5.1PrimeFaces p:idleMonitor呈现=“false”不起作用

在我的项目中,我使用了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; 
    } 
} 
+0

试过PF 6.0甚至6.1RC2?另一个解决方法是在idleMonitor上使用widgetVar并调用它的'pause()'函数 – Kukeltje

回答

1

有几件事情你应该做的是不同的。

  1. 使用<h:form>
  2. 使用的ActionListener通过p:commandButton和你的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> 

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

} 

更新: 看起来像一个bug,这里是一个解决办法:

<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

我在p:commandButton中使用了h:form和actionListener,但仍未解决该问题。 –

+0

更改? – jklee

+0

是的,点击开始和停止按钮时,动态更改,但单击停止按钮时,idleMonitor组件不会停止。 –