Atualizar <h:outputLabel> dinamicamente

1 resposta
alanmateus

Estou com uma problema com jsf e gostaria da ajuda de vocês.

Situação: Através de uma ação em um é 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 dinamicamente na tela mostrando qual o status do processo.
ps. não gostaria de usar 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:
@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();
				}
			}

		}
	}

}

Alguém poderia dar uma ajuda?
Estou fazendo a coisa certo? Caso não, o que posso fazer diferente?

1 Resposta

Roselito_Favero_da_S

Uma sugestão é usar o componente p:socket do Primefaces. Veja como em:

Criado 26 de novembro de 2013
Ultima resposta 27 de nov. de 2013
Respostas 1
Participantes 2