Jsf 如何从命令更新progressBar

Jsf 如何从命令更新progressBar,jsf,primefaces,Jsf,Primefaces,我想展示进步 我在第页有progressBar: MyView看起来像: 软件包应用程序; 导入javax.faces.application.FacesMessage; 导入javax.faces.context.FacesContext; 导入javax.inject.Named; @命名 公共类MyView{ 整体进度; 整数实际数; int总计数=4; 公共空间刷新{ 试一试{ 对于int i=0;i

我想展示进步

我在第页有progressBar:

MyView看起来像:

软件包应用程序; 导入javax.faces.application.FacesMessage; 导入javax.faces.context.FacesContext; 导入javax.inject.Named; @命名 公共类MyView{ 整体进度; 整数实际数; int总计数=4; 公共空间刷新{ 试一试{ 对于int i=0;i 我想在两者之间更新

我试着打电话更新

RequestContext.getCurrentInstance().update("pbAjax");
但这是行不通的

编辑:

我检查了一下,但这只是一个展示样本的描述,对我的情况没有多大帮助

此外,我还研究了哪些更接近我想要实现的目标,但它对我不起作用:

package app;

import javax.faces.bean.ViewScoped;
import javax.inject.Named;
import java.util.Date;

@Named
@ViewScoped
public class BatchModel {

    Integer progress;

    public Integer getProgress() {
        System.out.println(new Date() + " get progress");
        return progress;
    }

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

}
我将视图修改为:

package app;

import org.primefaces.context.RequestContext;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@ViewScoped
public class MyView {

    @Inject
    BatchModel batchModel;

    int actualCount;
    int overallCount = 4;

    public void refresh() {
        try {
            for (int i = 0; i < overallCount; i++) {
                Thread.sleep(1000);
                ++actualCount;
                batchModel.setProgress( 100 * actualCount / overallCount );
                RequestContext.getCurrentInstance().update("pbAjax");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void onComplete() {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Refresh completed"));
    }

}
但日志对此的描述最好:

周一至十二月23日18:45:58 CET 2019取得进展 周一至十二月23日18:45:58 CET 2019取得进展 周一至十二月23日18:46:00 CET 2019设定进度:25 周一至十二月23日18:46:01 CET 2019设定进度:50 周一至十二月23日18:46:02 CET 2019设定进度:75 周一至十二月23日18:46:03 CET 2019设定进度:100 周一至十二月23日18:46:03 CET 2019取得进展 周一至十二月23日18:46:03 CET 2019取得进展
因此,get progress在开始时调用,然后仅在结束时调用…

第一步应该是检查是否定期调用getProgress,即使没有设置进度。默认间隔为3000ms

在我的例子中,我有一个XHTML显示中缺少的问题

未定义素数面


在浏览器控制台中。

尝试PrimeFaces showcase,它都在那里,真的……这是否回答了您的问题?如果这是文件上传。核心功能可能已经存在于这个答案中,并且是一个更好的算法。。哦,很好用too@JGFMK:奇怪的评论,这些根本不是PrimeFaces下载进度相关的…我现在也注意到了这一点,但是使用ajax的commandbutton也不会起作用。。没有什么能让PrimeFaces的外观和感觉更好wrong@Kukeltje另一种方法是使用ajaxStatus并调用onstart show dialog和oncomplete hide dialog no?这种方式很简单,非常奇怪,ajax需要PrimeFacesJavaScript,如果没有h:head,它就会丢失。你的PF版本是什么?那么,xhtml代码真的是最重要的吗???仍然很难相信commandbutton有效,除非它在没有ajax的情况下有效。。。但在调试网络流量时,您可能已经看到了这一点