【发布时间】:2013-09-17 21:24:46
【问题描述】:
所以我想做的是: 我有一个生成文件的 for 循环。现在这可能需要一些时间。例如,假设在我的函数中生成文件可能需要 1-10 秒之间的任何时间。但是,我想每秒使用 a4j:poll 来查看到目前为止已经生成了多少文件。
对于我所做的方式,轮询似乎一直等到 for 循环完成执行,即使它的间隔是 1 秒。有没有办法让轮询仍然每秒检查一个变量的值,即使循环仍在执行。
我是否按预期使用 a4j:poll?如果不是正确的方法是什么?有没有更好的组件可以用来做这个?
这是我的jsf代码:
<h:form>
<a4j:outputPanel ajaxRendered="true">
<a4j:region id="pollregion" ajaxRendered="true">
<a4j:poll id="poll" interval="1000" enabled="#{bean.pollEnabled}"
render="poll,msg" />
</a4j:region>
</<a4j:outputPanel>
<h:commandButton value="Generate Report" type="button"
action="#{bean.generateReports}">
<a4j:ajax event="click" render="poll,msg" />
</h:commandButton>
<a4j:outputPanel id="msg">
<h:outputText value="#{bean.status}" />
</a4j:outputPanel>
</h:form>
这是我的豆子:
private Integer totalCount;
private Integer processedCount;
private String last;
private String status;
private boolean pollEnabled = false;
public void generateReports() {
reportStatus = "start";
totalCount = getSelectedIds().length;
processedCount = 0;
pollEnabled = true;
status = "Initiating report generation...";
try{
String[] ids = getSelectedIds();
for(String id: rbIds){
try
{
//generate report
last = id;
processedCount ++;
status = "Processed " + processedCount +" of " + totalCount + ". Last processed : " + last + ".";
}catch(Exception e){
displayException(e);
}
}
status = "Successfully generated file.";
pollEnabled = false;
}catch(Exception e){
displayException(e);
}
}
【问题讨论】:
-
我认为这是 JSF 的工作方式,它不会让您在循环运行时访问变量。