Jsf 如何从命令更新progressBar
我想展示进步 我在第页有progressBar: MyView看起来像: 软件包应用程序; 导入javax.faces.application.FacesMessage; 导入javax.faces.context.FacesContext; 导入javax.inject.Named; @命名 公共类MyView{ 整体进度; 整数实际数; int总计数=4; 公共空间刷新{ 试一试{ 对于int i=0;iJsf 如何从命令更新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
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的情况下有效。。。但在调试网络流量时,您可能已经看到了这一点