0

我想用进度条来显示导入数据的进度。因此,当我按下按钮时,我会调用该方法来开始导入,并希望用进度条显示进度。但是由于某种原因,当方法完成并显示 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;
    }
4

2 回答 2

2

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

您必须生成一个线程,以便导入请求立即完成

于 2012-09-17T10:22:56.870 回答
0

我或多或少是这样的:

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

按钮:

<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;
}
于 2018-09-17T16:11:14.487 回答