0

我对 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}" />

4

0 回答 0