【问题标题】:PrimeFaces p:idleMonitor rendered="false" not workingPrimeFaces p:idleMonitor 渲染=“假”不工作
【发布时间】:2017-04-04 05:48:41
【问题描述】:

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

在我的项目中,我使用了p:idleMonitor,在我的开始按钮上单击p:idleMonitor rendered="true" is working。

在我的停止按钮上单击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;
    }
}

【问题讨论】:

  • 试过 PF 6.0 甚至 6.1RC2?另一种解决方法是在 idleMonitor 上使用 widgetVar 并在其上调用“pause()”函数

标签: jsf primefaces


【解决方案1】:

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

  1. 使用&lt;h:form&gt;
  2. 使用 p:commandButton 的 actionListener 和 bean 的 void 方法

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>

【讨论】:

  • 我也在 p:commandButton 中使用了 h:form 和 actionListener 但仍然没有解决这个问题。
  • 改变了吗?
  • 是的, 在点击开始和停止按钮时会动态更改,但在点击停止按钮时 idleMonitor 组件不会停止.
  • 您可以创建问题github.com/primefaces/primefaces/issues 或调试渲染并发布拉取请求。
  • 试过 PF 6.0 甚至 6.1RC2?另一种解决方法是在 idleMonitor 上使用 widgetVar 并在其上调用“pause()”函数
猜你喜欢
  • 1970-01-01
  • 2012-07-04
  • 2017-08-10
  • 2017-01-01
  • 2011-06-12
  • 2020-03-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多