Java Progressbar don';我不在工作
我有一个fileUpload按钮,当用户上传文件时,ManagedBean中的进程将启动。这个过程可能非常慢,我需要向用户显示进度。因此,我有以下代码:Java Progressbar don';我不在工作,java,jsf,primefaces,Java,Jsf,Primefaces,我有一个fileUpload按钮,当用户上传文件时,ManagedBean中的进程将启动。这个过程可能非常慢,我需要向用户显示进度。因此,我有以下代码: <p:fileUpload id="commandButtonIniciarImportacao" disabled="#{importacaoArMB.produtoSelecionado == null}" fileUploadListener="#{importacaoArMB.upl
<p:fileUpload id="commandButtonIniciarImportacao"
disabled="#{importacaoArMB.produtoSelecionado == null}"
fileUploadListener="#{importacaoArMB.uploadArquivoImportacao}"
mode="advanced" auto="true" cancelLabel="Cancelar"
update=":formManterArquivoImportacao:tabViewManterArquivoImportacao:dataTableArs,
:formManterArquivoImportacao:tabViewManterArquivoImportacao:dataTableArsIgnorados"
label="Iniciar Importação..."
onstart="pbImportacao.start()" />
<p:progressBar widgetVar="pbImportacao" ajax="true" value="#{importacaoArMB.progresso}"
labelTemplate="#{value}%">
</p:progressBar>
我将“progress”属性传递给我的BO(business对象),在FOR的每个迭代器中,该属性的值都会递增
问题是:progressBar不会发生任何事情,请在0中继续。看看这个由您的代码构建的示例 这只是一个演示,但它的工作方式你想要的!希望你能把它改编成你真正的代码
<h:form id="form1">
<p:growl id="growl" showDetail="true"/>
<p:fileUpload id="fileup1"
fileUploadListener="#{uploadBean.uploadArquivoImportacao}"
mode="advanced"
auto="true"
cancelLabel="Cancelar"
update="growl"
label="Iniciar Importação..."
onstart="pbImportacao.start()" />
<p:progressBar
id="progress1"
widgetVar="pbImportacao"
ajax="true"
value="#{uploadBean.progresso}"
labelTemplate="{value}%">
<p:ajax event="complete" listener="#{uploadBean.onComplete}" update="growl" />
</p:progressBar>
</h:form>
在UploadBean类中:
public void uploadArquivoImportacao(FileUploadEvent fileUploadedEvent) {
System.out.println("File uploaded...");
//collects information about uloaded file here...
//then do what you have to do (can take time)
doYourStuff();
}
public void doYourStuff() {
//fake job that takes 10 seconds (100 x 100 millis)
System.out.println("Job starts...");
for (int i = 0; i < 100; i++) {
setProgresso(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
setProgresso(0);
System.out.println("Job done.");
}
private long progresso = 0;
public long getProgresso() {
return progresso;
}
public void setProgresso(long progresso) {
this.progresso = progresso;
}
public void onComplete() {
System.out.println("oncomplete !");
}
public void uploadarquivoimportaco(FileUploadEvent fileUploadedEvent){
System.out.println(“文件上传…”);
//在此处收集有关uloaded文件的信息。。。
//然后做你必须做的事情(可能需要时间)
doYourStuff();
}
公共物品{
//耗时10秒(100 x 100毫秒)的假作业
System.out.println(“作业开始…”);
对于(int i=0;i<100;i++){
setProgresso(i);
试一试{
睡眠(100);
}捕捉(中断异常e){
}
}
setProgresso(0);
System.out.println(“完成任务”);
}
私人长期进展o=0;
公共长期发展计划(){
返回progresso;
}
公共空间设置进度(长进度){
this.progresso=progresso;
}
未完成的公共空间(){
System.out.println(“oncomplete!”);
}
评论
- ProgressBar每2或3秒更新一次(刷新率不太高)
- 未调用onComplete(我不明白为什么)
labelTemplate=“{value}%”
(此处不需要)。但如何解决此问题?我需要在上传文件后启动另一个进程。
public void uploadArquivoImportacao(FileUploadEvent fileUploadedEvent) {
System.out.println("File uploaded...");
//collects information about uloaded file here...
//then do what you have to do (can take time)
doYourStuff();
}
public void doYourStuff() {
//fake job that takes 10 seconds (100 x 100 millis)
System.out.println("Job starts...");
for (int i = 0; i < 100; i++) {
setProgresso(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
setProgresso(0);
System.out.println("Job done.");
}
private long progresso = 0;
public long getProgresso() {
return progresso;
}
public void setProgresso(long progresso) {
this.progresso = progresso;
}
public void onComplete() {
System.out.println("oncomplete !");
}