Как выполнить задачу и показать ее ход в весеннем веб-потоке - PullRequest
1 голос
/ 16 февраля 2011

Я должен автоматически выполнить задачу и показать ее ход клиенту при входе в поток. Когда задача завершена, она должна перенаправиться в другой поток. Прогресс должен показывать PrimeFaces p: progressBar

Есть идеи?

1 Ответ

0 голосов
/ 19 сентября 2012

Вопрос был задан более года назад, но вот некоторые фрагменты кода, которые, надеюсь, помогут кому-то еще в будущем:

    <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, так как я хочуразделить его между потоками и пользователями.

...