3

我有一个常规的 Ajax PF 进度条:

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

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

4

1 回答 1

8

使用该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>
    

编辑:要在每次 ajax 更新后执行,设置有点不同:

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

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

    <p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true"
        widgetVar="progress" interval="3000">
        <f:event type="postValidate" listener="#{theBean.doJs}" />
    </p:progressBar>
    
于 2013-06-01T03:11:48.330 回答