使用progressBar Primefaces停止呼叫

时间:2016-04-11 18:55:16

标签: jsf jsf-2 primefaces progress-bar

分享100%后取消progressBar来电? 我试过这样做:

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

或致电PF('progress').cancel();,但没有成功。 关注我的progressBar

<p:progressBar widgetVar="progress" ajax="true" global="false"
                    value="#{usarLayoutBean.porcentagem}" labelTemplate="{value}%"
                    styleClass="animated">
    <p:ajax event="complete" listener="#{usarLayoutBean.doJs()}"/>
</p:progressBar>

2 个答案:

答案 0 :(得分:0)

以下代码适用于进度条。进度条停在100并且不再调用getProgress()。一旦Integer进度等于100,就会调用onComplete()。

function your_function_name_here($some_params){
  return "some results";
}

add_action('init', 'your_function_name_here');

Managed Bean

<h:form>
        <p:growl id="growl" />
        <p:commandButton value="Start" type="button"
            onclick="PF('pbAjax').start();" />

        <p:progressBar widgetVar="pbAjax" ajax="true"
            value="#{progressBean.progress}" labelTemplate="{value}%"
            styleClass="animated" global="false">
            <p:ajax event="complete" listener="#{progressBean.onComplete}"
                update="growl" />
        </p:progressBar>
</h:form>

输出

package com.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class ProgressBean {
    private Integer progress;

    public Integer getProgress() {
        System.out.println("getProgress() Old - " + progress);

        if (progress == null) {
            progress = 0;
        } else {
            progress = progress + (int) (Math.random() * 35);

            if (progress > 100) // Only when progress = 100 does the onComplete() method gets called.
                progress = 100;
        }

        System.out.println("getProgress() New- " + progress);
        return progress;
    }

    public void setProgress(Integer progress) {
        System.out.println("setProgress()" + progress);
        this.progress = progress;
    }

    public void onComplete() {
        System.out.println("onComplete()");

        //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Progress Completed"));
        progress = null;
    }

}

JSF 2.2.4,Primefaces 5.3,Tomcat 8

答案 1 :(得分:-1)

  1. 以下代码不会停止progressBar
      

    context.execute(&#34; progress.cancel();&#34);

  2. 因为正确的方法是

     context.execute("PF('progress').cancel()");
    
    on doJs()方法。

    1. 仔细检查getPorcentagem是否至少返回100次。如果发生这种情况,进度会自动停止。