我对 JSF 很陌生,所以我需要可以帮助我的人。我正在尝试在页面中实现进度条,所以我遵循了这个例子; 很清楚,但我的问题是“值”属性的值不是在 bean (CLASS_A) 中计算的,而是在从它调用的 util 类 (CLASS_B) 中计算的。在这种情况下,我在 CLASS_A 中创建了一个“accomplishedPercentage”变量,并从 CLASS_B 更新了它,因此我可以在 xhtml 页面中使用它,但没有得到更新;我还尝试创建一个 ProgressBarBean 类(用 @ManagedBean 和 @SessionScoped 注释)并调用该方法来计算 CLASS_B 的进度,但我不知道为什么我总是将 ProgressBarBean 设为 null(我用 @ 注入它托管属性)。有人可以帮助我吗?一些例子或指出我做错了什么?提前致谢。
一些代码:
这是视图中的进度条:
<rich:progressBar value="#{progressBar.accomplishedPercentage}"
interval="2000" label="#{progressBar.accomplishedPercentage} %"
enabled="#{oaBean.showProgressBar}" minValue="-1" maxValue="100"
reRenderAfterComplete="createFormPanel">
</rich:progressBar>
进度条豆
@ManagedBean(name="progressBar")
@SessionScoped
public class ProgressBarBean implements Serializable {
private static final long serialVersionUID = 1L;
private Long accomplishedPercentage;
@PostConstruct
public void init() {
accomplishedPercentage = 0L;
}
public void incrementAccomplishedPercentage (Long inc) {
this.setAccomplishedPercentage(this.getAccomplishedPercentage() + inc);
}
//getter and setter for accomplishedPercentage
}
然后进度条通过 CLASS_B 注入@ManagedProperty(value="#{progressBar}")
private ProgressBarBean progressBar;
并调用 method incrementAccomplishedPercentage
,但正如我所说,我得到的progressBar
是 null 值。
编辑 1
现在我收到 ProgressBarBean 的一个实例,但问题是永远不会更新 UI 中进度条的值:该方法getAccomplishedPercentage
仅在加载页面时调用(因此它始终为 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>
我试图链接两个控件,但我不能,有人知道我该怎么做吗?
问候
EDIT 2
根据@Andy 的建议,我将进度条更改为 primefaces,但在这种情况下,我看不到任何进度显示(甚至没有 0)。现在是 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}" />