我想用进度条来显示导入数据的进度。因此,当我按下按钮时,我会调用该方法来开始导入,并希望用进度条显示进度。 但由于某种原因,该方法完成后会显示条形图并显示 100%。当我刷新页面时进度条没有消失。
这是我的 JSP:
<h:panelGrid styleClass="footBtnBar" columns="2"
cellpadding="0" cellspacing="0">
<h:panelGroup style="float:left">
<rich:progressBar mode="ajax" value="#{excelImportController.currentValue}" interval="1000" id="pb"
enabled="#{excelImportController.pgEnabled}" minValue="0" maxValue="100"
reRenderAfterComplete="progressPanel">
<h:outputText value="#{excelImportController.currentValue} %" />
</rich:progressBar>
</h:panelGroup>
<h:panelGroup style="float:right">
<a4j:commandLink action="#{excelImportController.startImport}" reRender="pb"
styleClass="buttonOra120">
<h:outputText value="#{bundleDataImport['Label.import.data']}" />
</a4j:commandLink>
</h:panelGroup>
</h:panelGrid>
在我的 Bean 中,我有一个方法,当我按下按钮时会调用该方法,并在那里设置进度条的当前值。还有当前值的 setter 和 getter:
public class ExcelImportController {
private int currentValue;
private boolean pgEnabled = false;
public String startImport() {
// in this method I set the current value
// and pgEnabled=true
}
public int getCurrentValue() {
return (currentValue * 100) / numberOfSheets;
}
public void setCurrentValue(int currentValue) {
this.currentValue = currentValue;
}
最佳答案
这是因为 JSF 一次只能处理一个 ajax 请求。所以进度条的ajax请求只有在导入ajax请求完成后才会执行。
您必须生成一个线程,以便导入请求立即完成
关于java - <丰富:progressbar> Progress bar is shown only when method is finished,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754585/