【问题标题】:Primefaces progressbar not updating?Primefaces进度条不更新?
【发布时间】:2016-10-12 07:03:49
【问题描述】:

我的进度条没有更新,为什么? 控制器方法被调用,progess 变量正确递增:

XHTML

<p:dialog>
    <h:outputLabel value="Count:" for="batchCount"/>
    <p:inputText id="batchCount" required="true"
        value="#{batchModel.count}">
    </p:inputText>

    <p:commandButton id="generateBatchButton" value="GO"
        actionListener="#{batchController.sendBatch()}"
        onclick="PF('progressVar').start();"
        oncomplete="PF('dialogBatchParams').hide();"/>

    <p:progressBar id="progressBar"
        widgetVar="progressVar" 
        value="#{batchModel.progress}" 
        labelTemplate="{value}%">
    </p:progressBar>
</p:dialog>

控制器方法

public void sendBatch() {       
    for (int i = 0; i < batch.size(); i++) {
        batchModel.setProgress(Math.round(100 * (float) i / (float) batch.size()));
        // Do stuff here
    }
}

型号

@Named
@ViewScoped // or @SessionScoped 
public class BatchModel implements Serializable {
    private static final long serialVersionUID = 1L;

    private int count = 100;
    private int progress;

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getProgress() {
        return progress;
    }

    public void setProgress(int progress) {
        this.progress = progress;
    }
}

我的进度已正确更新,我在记录时得到此输出:

2016-10-19 10:08:49,707 INFO controller.BatchController -> Sending batch
0
10
20
30
40
50
60
70
80
90
2016-10-19 10:08:57,432 INFO controller.BatchController -> Done sending batch

我正在使用 PF 6。我尝试了使用和不使用“更新”标签,我使用了 ajax 标签,但没有骰子。

【问题讨论】:

  • 尝试在BatchModel(和你的控制器)上使用@ViewScoped
  • .. 进度条的每次更新都会触发获取进度的请求。由于它是请求范围的,因此您将继续获得 0。
  • 我按你说的改了,但是没有更新进度条。我用我的新代码更新了问题。
  • 排除范围问题,你能确认BatchModel#getProgress()给你的值是正确的吗?
  • 您是否尝试将ajax="true" 添加到进度条?

标签: jsf primefaces


【解决方案1】:

您的问题始于RequestScoped bean。这些是在每个请求中创建的。由于条形图的更新需要请求,因此您将再次获得一个进度设置为 0 的新 bean。
最好在您的 bean(和控制器)上使用 ViewScoped

此外,您的进度条中缺少ajax="true"(它希望您在客户端进行更新)。您应该将其更改为:

<p:progressBar id="progressBar"
               ajax="true"
               widgetVar="progressVar" 
               value="#{batchModel.progress}" 
               labelTemplate="{value}%"/>

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多