如何实现Primefaces progressBar的更新处理程序?

时间:2013-05-31 20:59:52

标签: jsf jsf-2 primefaces

我有一个常规的Ajax PF progressBar:

        <p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true" widgetVar="progress">
            <p:ajax event="complete" oncomplete="progress.cancel();"></p:ajax>
        </p:progressBar>

每当progressBar更新它的值时,如何运行我的JavaScript代码?

1 个答案:

答案 0 :(得分:6)

使用RequestContext对象从服务器端执行javascript。要使用它:

  1. 在您的支持bean中定义一个方法,您将在该方法中使用RequestContext对象

    public void doJs() {
        RequestContext ctx = RequestContext.getCurrentInstance();
        context.execute("progress.cancel();");
    }
    
  2. listener

    <p:ajax/>属性中设置此方法
    <p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
        widgetVar="progress">
        <p:ajax event="complete" listener="#{theBean.doJs}"/>
    </p:progressBar>
    
  3. 编辑:要在每次ajax更新后执行执行,设置会略有不同:

    1. interval属性添加到进度条以引入更好的受控轮询机制

      <p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
          widgetVar="progress" interval="3000">
      
    2. 添加<f:event/>以挂钩组件的页面生命周期,并从那里执行服务器端更新。我将推荐PostValidateEvent活动

      <p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
          widgetVar="progress" interval="3000">
          <f:event type="postValidate" listener="#{theBean.doJs}" />
      </p:progressBar>