Estou com uma problema com jsf e gostaria da ajuda de vocês.
Situação: Através de uma ação em um <h:commandButton> é disparado uma processo de execução que demora “N” minutos. Dentro desse processo eu tenho alguns status: Inicial, Leitura e Finalizado.
Eu gostaria de atualizar um <h:outputLabel> dinamicamente na tela mostrando qual o status do processo.
ps. não gostaria de usar <p:poll> do prime.
A minha solução atual: Pensei em utilizar uma Thread (no managerBean) que iria ficar capturando o status do processo e fazendo o set de um atributo do managerBean.
Códigos:
Pagina xhtml:
<h:commandButton value="Iniciar" action="#{myBean.executar}" />
<h:outputLabel id="status" value="#{myBean.statusValidation}" />
Bean:
[code]
@ManagedBean(name = “myBean”)
@SessionScoped
public class myBean {
private UpdateLabel update = new UpdateLabel();
private String statusValidation = null;
public String getStatusValidation() {
return statusValidation;
}
public void setStatusValidation(String statusValidation) {
this.statusValidation = statusValidation;
}
public String executar() {
Thread UpdateLabel = new Thread(update);
UpdateLabel.start();
Process process = new Process();
process.executeProcess();
return "";
}
private class UpdateLabel implements Runnable {
public void run() {
while (true) {
try {
setStatusValidation(Process.getStatus());
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
[/code]
Alguém poderia dar uma ajuda?
Estou fazendo a coisa certo? Caso não, o que posso fazer diferente?