【发布时间】: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