Java JSF进度条未更新
我是JSF新手,所以我需要有人能帮助我。我试图在一个页面中实现一个进度条,所以我遵循了;这很清楚,但我的问题是“value”属性的值不是在bean(CLASS_A)中计算的,而是在从bean调用的util类(CLASS_B)中计算的。在这种情况下,我在类_a中创建了一个“completedpercentage”变量,并从类_B中对其进行了更新,因此我可以在xhtml页面中使用它,但没有得到更新;我还尝试创建ProgressBarBean类(使用@ManagedBean和@SessionScoped)并调用该方法来计算类_B的进度,但我不知道为什么我总是将ProgressBarBean设置为null(我正在使用@ManagedProperty注入它)。有人能帮我吗?举个例子或者告诉我我做错了什么?提前谢谢。Java JSF进度条未更新,java,jsf,jsf-2,richfaces,progress-bar,Java,Jsf,Jsf 2,Richfaces,Progress Bar,我是JSF新手,所以我需要有人能帮助我。我试图在一个页面中实现一个进度条,所以我遵循了;这很清楚,但我的问题是“value”属性的值不是在bean(CLASS_A)中计算的,而是在从bean调用的util类(CLASS_B)中计算的。在这种情况下,我在类_a中创建了一个“completedpercentage”变量,并从类_B中对其进行了更新,因此我可以在xhtml页面中使用它,但没有得到更新;我还尝试创建ProgressBarBean类(使用@ManagedBean和@SessionScope
一些代码:
这是视图中的进度条:
<rich:progressBar value="#{progressBar.accomplishedPercentage}"
interval="2000" label="#{progressBar.accomplishedPercentage} %"
enabled="#{oaBean.showProgressBar}" minValue="-1" maxValue="100"
reRenderAfterComplete="createFormPanel">
</rich:progressBar>
然后通过
@ManagedProperty(value=“#{progressBar}”)将进度条注入类_B中
私人ProgressBarBean progressBar
并调用方法incrementCompletedPercentage
,但正如我所说,我得到的progressBar
是一个空值
编辑1
现在我收到了ProgressBarBean的一个实例,但问题是UI中的进度条的值从未更新:方法
getCompletedPercentage
仅在加载页面时调用(因此始终为0),而不是在每2秒处理期间调用。我认为进度条本身与启动它的按钮无关。以下是进度条的完整定义:
<p:dialog modal="true" widgetVar="statusDialog" header="Status"
draggable="false" closable="false" resizable="false">
<rich:progressBar value="#{oaBean.accomplishedPercentage}"
interval="1000" label="#{oaBean.accomplishedPercentage} %"
enabled="#{oaBean.showProgressBar}" minValue="-1" maxValue="100"
reRenderAfterComplete="createFormPanel">
</rich:progressBar>
</p:dialog>
这是命令按钮的定义:
<p:commandButton id="generate" value="Generate"
oncomplete="generateDialogDocumento.hide() onclick="PrimeFaces.monitorDownload(start, stop)"
icon="ui-icon-arrowthichk-s" ajax="false">
<p:fileDownload value="#{oaBean.file}" />
</p:commandButton>
CLASS_B的作用域是什么?Hi@dratewka,实际上它没有指定作用域,只是一个用作实用程序的简单类。如果它不是托管bean,那么注入(@ManagedProperty
)不起作用-因此空的progressBar
值。将其更改为托管bean并查看它是否有帮助Hanks@dratewka,我正在使用@Scope
和@Named
创建bean,并使用@Autowired
注入依赖项(不使用ManagedBean或ManagedProperty),因此现在我收到了ProgressBarBean的正确实例,但更新后的值没有反映在UI中。我尝试访问类B(#{classb.progressBar.CompleteShedPercentage})中的ProgressBarBean,并在类B中创建一个新变量“CompleteShedPercentage”,然后从UI调用它(#{classb.CompleteShedPercentage}),但仍然看不到更新后的值。任何提示?两个问题:1)是否每隔2秒调用getCompletedPercentage
(在其中放置断点)?2) 进度条是否在h:form
中?
<p:commandButton id="generate" value="Generate"
oncomplete="generateDialogDocumento.hide() onclick="PrimeFaces.monitorDownload(start, stop)"
icon="ui-icon-arrowthichk-s" ajax="false">
<p:fileDownload value="#{oaBean.file}" />
</p:commandButton>
<p:commandButton id="generate" value="Generate"
oncomplete="generateDialogDocumento.hide()" onclick="PrimeFaces.monitorDownload(start, stop); statusDialog.show();"
icon="ui-icon-arrowthichk-s" ajax="false">
<p:dialog modal="false" widgetVar="statusDialog" header="Status"
draggable="false" closable="false" resizable="false">
<p:growl id="growl" />
<p:progressBar widgetVar="pbAjax" ajax="true" value="#{progressBar.accomplishedPercentage}" labelTemplate="#{progressBar.accomplishedPercentage}%" >
<p:ajax event="complete" listener="#{progressBar.onComplete}" update="growl" oncomplete="statusDialog.hide()"/>
</p:progressBar>
</p:dialog>
<p:fileDownload value="#{oaBean.file}" />