Progress bar is shown only when method is finished

问题描述 投票:0回答:2

我想使用进度条显示导入数据的进度。因此,当我按下按钮时,我调用该方法开始导入,并希望通过进度条显示进度。但由于某种原因,当方法完成时显示条形并显示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;
    }
java jsp jsf richfaces
2个回答
2
投票

这是因为JSF一次只能处理一个ajax请求。因此,只有在导入ajax请求完成后才会执行进度条的ajax请求。

您必须生成一个线程,以便import-request立即完成


0
投票

我或多或少地喜欢这样:

Page xhtml:

<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>

button:

<div class="buttons">
  <a4j:jsFunction id ="buton"
  name="buton"
  action="#{method.enable}"/>
</div>

Java:

public void increment() {
  if (currentValue < 100) {
    currentValue += 2;
  }
  if (currentValue >= 100) {
   setEnabled(false);
  }
}

public int getCurrentValue() {
  increment();
  return currentValue;
}
© www.soinside.com 2019 - 2024. All rights reserved.