我想使用进度条显示导入数据的进度。因此,当我按下按钮时,我调用该方法开始导入,并希望通过进度条显示进度。但由于某种原因,当方法完成时显示条形并显示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请求。
您必须生成一个线程,以便import-request立即完成
我或多或少地喜欢这样:
<rich:progressBar
mode="ajax"
enabled="true"
value="#{method.currentValue}"
interval="2000"
id="pb"
minValue="0"
maxValue="100"
reRenderAfterComplete="progressPanel">
<h:outputText value="#{method.currentValue} %" />
</rich:progressBar>
<div class="buttons">
<a4j:jsFunction id ="buton"
name="buton"
action="#{method.enable}"/>
</div>
public void increment() {
if (currentValue < 100) {
currentValue += 2;
}
if (currentValue >= 100) {
setEnabled(false);
}
}
public int getCurrentValue() {
increment();
return currentValue;
}