在我的脸上,我正在使用进度条。现在,进度条的进度来自SessionScope中的Holder类,而我的支持bean位于RequestScope中。一旦进度为100%并且我的活动结束,我正在做的是将进度设置为0.现在,当我点击导出按钮时,下一次再次在同一页面中,进度首先显示为100%然后继续降至0然后显示实际进度。
我的问题是,当我设置进度为0时,为什么第二次最初它显示100作为值?任何帮助。
代码是:
<p:commandLink id="excelExport"
actionListener="#{studentDetailsBean.export}" ajax="false"
onclick="progressDisplay.show();">
<p:graphicImage library="img" name="excel.png" width="20" />
</p:commandLink>
<p:tooltip for="excelExport" value="Export to Excel"
showEffect="fade" hideEffect="fade" />
<p:dialog id="progress_dialog" dynamic="true"
onShow="pbAjax.start();pbAjax.setValue(0);" width="300" position="center"
widgetVar="progressDisplay" resizable="false" draggable="false"
modal="true" showHeader="false">
<p:progressBar id="progressBar" widgetVar="pbAjax" ajax="true"
value="#{studentDetailsBean.progressBarHolder.progress}"
labelTemplate="Exporting..." style="margin-bottom:0;"
interval="2000">
<p:ajax event="complete"
listener="#{studentDetailsBean.onProgressComplete}"
oncomplete="pbAjax.cancel();progressDisplay.hide()" />
</p:progressBar>
</p:dialog>
答案 0 :(得分:3)
进行渲染后,进度条依赖于一个javascript对象,该对象会反复检查模型以进行修改。
当它达到100%时,javascript对象停止检查managedbean并保留它以前的状态。
当您启动另一个进程时,组件将保持100%,直到它完成第一次进度检查。
为了保证javascript对象(可通过widgetVar访问)从0开始,你需要做一个休闲(来自Primefaces Demo):
<强> XHTML 强>
<p:progressBar widgetVar="pbAjax" ajax="true" value="#{progressBean.progress}" labelTemplate="{value}%" styleClass="animated">
<p:ajax event="complete" listener="#{progressBean.onComplete}" update="growl" oncomplete="startButton2.enable()"/>
</p:progressBar>
<p:commandButton value="Start" type="button" onclick="pbAjax.setValue(0); PF('pbAjax').start(); PF('startButton2').disable();" widgetVar="startButton2" />
注意:pbAjax.setValue(0);