简体   繁体   中英

Stop call with progressBar Primefaces

Cancelling the progressBar call after sharing 100%? I've tried to do so:

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

Or call the PF('progress').cancel(); , but without success. Follow my 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>

The code below works for the progress bar. The progress bar stops at 100 and getProgress() is not called again. The onComplete() is called once the Integer progress is equal to 100.

<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>

Managed Bean

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

}

Output

getProgress() Old - null
getProgress() New- 0
getProgress() Old - 0
getProgress() New- 24
getProgress() Old - 24
getProgress() New- 50
getProgress() Old - 50
getProgress() New- 82
getProgress() Old - 82
getProgress() New- 100
onComplete()

JSF 2.2.4 , Primefaces 5.3 , Tomcat 8

  1. The code below won't stop progressBar

    context.execute("progress.cancel();");

Because the correct way is

 context.execute("PF('progress').cancel()");

on the doJs() method.

  1. Double check if getPorcentagem is returning 100 at least once. If this happens, the progress stops automatically.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM