JSF进度条未更新

时间:2013-08-01 12:18:32

标签: java jsf jsf-2 richfaces progress-bar

我对JSF很陌生,所以我需要一个可以帮助我的人。我正在尝试在页面中实现进度条,所以我跟着this example;它很清楚,但我的问题是“value”属性的值不是在bean(CLASS_A)中计算的,而是在从它调用的util类(CLASS_B)中计算的。在这个上下文中,我在CLASS_A中创建了一个“completedPercentage”变量,并从CLASS_B更新了它,因此我可以在xhtml页面中使用它,但是没有得到更新;我还尝试创建一个ProgressBarBean类(使用@ManagedBean和@SessionScoped进行分配)并调用该方法来计算CLASS_B的进度,但我不知道为什么我总是将ProgressBarBean作为null(我用@注入它) ManagedProperty)。有人能帮助我吗?一些例子还是指出我做错了什么?提前致谢。

一些代码:
这是视图中的进度条:

<rich:progressBar value="#{progressBar.accomplishedPercentage}"
  interval="2000" label="#{progressBar.accomplishedPercentage} %"
  enabled="#{oaBean.showProgressBar}" minValue="-1" maxValue="100"
  reRenderAfterComplete="createFormPanel">
</rich:progressBar>


ProgressBarBean

@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
}


然后通过@ManagedProperty(value="#{progressBar}") private ProgressBarBean progressBar;在CLASS_B中注入进度条并调用方法incrementAccomplishedPercentage,但正如我所说,我得到的值为progressBar


编辑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>

我试图链接两个控件,但我不能,有人知道我该怎么办?
问候
编辑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}" />

0 个答案:

没有答案