如何在另一个完成使用JSF Primefaces 5.2之后启动进度条?

时间:2016-04-29 23:35:38

标签: jsf jsf-2 primefaces progress-bar

我是JSF的新手,我遇到了一些麻烦,其中一个是上面提到的问题,我无法在任何地方找到解决方案。

我的方案是:

  1. 我有一个进度条列表,每个进程条都负责显示方法执行的进度(此方法只包含一个带有 Thread.sleep()的for循环来模拟一个任务一段时间,我将这个方法与所有进度条一起使用。)
  2. 每个进度条都有一个按钮,负责取消任务。
  3. 还有一个按钮负责启动第一个“任务”。
  4. 我需要什么: 一旦我单击开始按钮,我需要它来启动第一个任务,因此第一个进度条。 完成后,下一个任务必须开始,因此下一个进度条。 第二个任务完成后,第三个任务必须启动,因此第三个进度条,依此类推......

    问题: 我很难在第一个任务完成后立即尝试启动第二个任务,依此类推。我仍然无法弄清楚如何使它发挥作用。

    我甚至不记得我试图解决这个问题的事情,所以现在我在这里......

    这是我的.xhtml:

    <h:form>
        <br/>
        <p:outputLabel for="botao-iniciar">Iniciar transferências:</p:outputLabel>
        <p:commandButton id="botao-iniciar" onclick="PF('pbAjax-1').start()"
        widgetVar="startButton" value="Iniciar" />
        <br/><br/>
        <p:separator />
    
        <ui:repeat var="transf" value="#{transferenciaStatusMB.listaTransferencia}">
            <h:panelGrid style="width:100%">
                <p:outputLabel>Transferência ID: #{transf.id}</p:outputLabel>
    
                <p:progressBar widgetVar="pbAjax-#{transf.id}" ajax="true" 
                value="#{transferenciaStatusMB.getProgresso(transf)}" 
                labelTemplate="{value}%" global="false" interval="1000" >
                    <p:ajax event="complete" 
                    listener="#{transferenciaStatusMB.onComplete(transf)}" />
                </p:progressBar>
    
                <p:commandButton widgetVar="cancelButton-#{transf.id}" value="Cancelar" 
                actionListener="#{transferenciaStatusMB.cancelar(transf)}"
                oncomplete="PF('cancelButton-#{transf.id}').disable();" >                       
                </p:commandButton>
    
                <p:separator />
            </h:panelGrid>
        </ui:repeat>
    </h:form>
    

    以下是它使用的bean的方法:

    // Simulate task (based on the Primefaces' showcase example): 
    public Integer getProgresso(Transferencia transferencia) {
        if(transferencia.getProgresso() == null) {
            transferencia.setProgresso(0);
        } else {
               System.out.printf("Progress Transference ID %d: %d.\n", transferencia.getId(), transferencia.getProgresso());
    
            if(transferencia.getProgresso() < 100){
                transferencia.setProgresso(
                    transferencia.getProgresso() + (int)(Math.random() * 35));
    
                if(transferencia.getProgresso() > 100) {
                    transferencia.setProgresso(100);
                }
            }
    
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        return transferencia.getProgresso();
    }
    
    // Cancel a task:
    public void cancelar(Transferencia transferencia) {
        transferencia.setProgresso(null);
        System.out.println("Transferencia ID " + transferencia.getId() +" CANCELADA!");
    }
    
    // After a task is completed:
    public void onComplete(Transferencia transferencia) {
        System.out.println("Transferencia ID " + transferencia.getId() +" FINALIZADA!");
    }
    

0 个答案:

没有答案