Вопрос был задан более года назад, но вот некоторые фрагменты кода, которые, надеюсь, помогут кому-то еще в будущем:
<h:panelGrid>
<p:progressBar widgetVar="progressBar" ajax="true" value="#{archiveCopyCreator.progress}" interval="1000" labelTemplate="{value}%" styleClass="animated" style="width: 500px;">
<p:ajax event="complete" listener="#{archiveCopyCreator.onComplete}"/>
</p:progressBar>
<h:panelGrid styleClass="centered">
<p:commandButton value="Avbryt" action="cancel" ajax="false" immediate="true" />
</h:panelGrid>
</h:panelGrid>
<script type="text/javascript">
$(document).ready(function() {
progressBar.start();
});
</script>
Я создаю progressBar и обновляю его на основе значения водин из моих бобов.Когда завершено, ajax-вызов сделан к бобу.Индикатор выполнения запускается вручную с использованием javascript.
@Component
public class ArchiveCopyCreator implements Serializable {
private static final long serialVersionUID = 1L;
protected Integer progress;
public Integer getProgress() {
if (this.progress == null) {
this.progress = 0;
} else {
this.progress = this.progress + (int) (Math.random() * 15);
if (this.progress > 100) {
this.progress = 100;
}
}
return this.progress;
}
public void setProgress(final Integer progress) {
this.progress = progress;
}
public void cancel() {
this.progress = null;
}
public void reset() {
this.progress = null;
}
public boolean hasProgress() {
return this.progress != null;
}
public void onComplete() {
RequestControlContext requestContext = (RequestControlContext) RequestContextHolder.getRequestContext();
this.objektidentiteter = null;
this.progress = null;
requestContext.handleEvent(new Event(this, "complete"));
return;
}
}
Фактический прогресс подделывается с использованием Math.random в этом примере.
Обратите внимание, что onComplete () вызывается с использованиемAjax от ProgressBar.Этот javacode выполняет переход в мое следующее состояние Spring Webflow с идентификатором «complete».
Не забудьте создать новый компонент поддержки для каждого пользователя / потока ... ArchiveCopyCreator в моем примере - это @Component, так как я хочуразделить его между потоками и пользователями.