【问题标题】:Stop call with progressBar Primefaces使用 progressBar Primefaces 停止通话
【发布时间】:2016-04-11 18:55:15
【问题描述】:

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

【问题讨论】:

  • 那么会发生什么?如果您只显示警报怎么办,这行得通吗?您在哪里尝试拨打PF('progress').cancel();
  • 我正在调用一个“p: 对话框”,然后 OnHide 对话框。一旦达到 100%,他就会继续调用 getPorcentagem。

标签: jsf jsf-2 primefaces progress-bar


【解决方案1】:

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

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

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

}

输出

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

【讨论】:

  • 文字中的一些解释可能已经到位
  • 为什么下面的代码工作得更好......有什么重要的区别?为什么你认为它没有在问题中被调用?这些是答案中最重要的事情(学会钓鱼而不是给鱼)
【解决方案2】:
  1. 下面的代码不会停止progressBar

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

因为正确的方法是

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

关于 doJs() 方法。

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

【讨论】:

  • 请重新阅读问题。 OP尝试了“1”。那么 2 最初只是一个评论
  • DH 发布了一个错误代码,该代码演示了对使用 execute() 方法和 primefaces 小部件的误解。如果他设法通过返回 100 来解决问题,则 2 是一个解决方案。
  • 1:不,在旧版本或旧版本中应该可以工作......不要误解那里的执行方法。 2:解决方案IF...所以检查是注释
  • 我知道它适用于旧版本。我以为他用的是最新的。 @DH。我们期待更多细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多