我是JSF的新手,我遇到了一些麻烦,其中一个是上面提到的问题,我无法在任何地方找到解决方案。
我的方案是:
我需要什么: 一旦我单击开始按钮,我需要它来启动第一个任务,因此第一个进度条。 完成后,下一个任务必须开始,因此下一个进度条。 第二个任务完成后,第三个任务必须启动,因此第三个进度条,依此类推......
问题: 我很难在第一个任务完成后立即尝试启动第二个任务,依此类推。我仍然无法弄清楚如何使它发挥作用。
我甚至不记得我试图解决这个问题的事情,所以现在我在这里......
这是我的.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!");
}