如何执行任务并在spring web流程中显示其进度

时间:2011-02-16 07:37:59

标签: java primefaces spring-webflow

我必须自动执行任务,并在输入流时向客户显示其进度。 任务完成后,它应该重定向到另一个流程。 PrimeFaces p:progressBar

应该显示进度

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题在一年多前被问过,但是这里有一些代码片段,希望将来可以帮助其他人:

    <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,并根据我的一个bean中的值更新它。完成后,将对bean进行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伪造实际进度。

请注意,使用progressBar中的ajax调用onComplete()。那个javacode转换到我的下一个Spring Webflow状态,ID为“complete”。

请记住为每个用户/流创建一个新的支持bean ...我的示例中的ArchiveCopyCreator是@Component,因为我想在流和用户之间共享它。