I need help because I couldn't find anything like this (or I don't know how to search it correctly).
There's this method I call that executes multiple tasks. What I need is to display a message on screen at the end of each task without ending the method or making the user click on a button again.
Here's my method:
public void trataDados() {
String procedure = "";
// task 1
try {
procedure = "trata_dados_previsao_viagem";
StoredProcedureQuery queryTDPV = previsaoCrud.getEntityManager().createNamedStoredProcedureQuery(procedure);
queryTDPV.setParameter("numTipoProduto", numTipoProduto);
queryTDPV.setParameter("codCicloFatProduto", codCicloFatProduto);
queryTDPV.setParameter("dt_inicio", this.dtInicial);
queryTDPV.execute();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso!", "Tratamento de Dados das Viagens Concluído com Sucesso!"));
} catch (Exception ex) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERRO!", "Erro ao executar processo " + procedure + ", por gentileza, informe a T.I." + ex.getMessage()));
}
// task 2
EntityManager em = usuService.crud().getEntityManager();
String query = "select row_number() over() as id, " +
"cliente, " +
"area_nome, " +
"placa_fixa, " +
"placa_mercosul, " +
"placa_viagem, " +
"viag_status " +
"from java.vie_analise_placas_fixas_viagem_mercosul";
listPrvTrataDadosPl = em.createNativeQuery(query, "PrevTrataDadosPlacaMapping").getResultList();
int registros = listPrvTrataDadosPl.size();
if (registros > 0) {
int i = 0;
for (i = 0; i < registros; i++) {
PrevTrataDadosPlaca placa = new PrevTrataDadosPlaca();
placa.setCliente(listPrvTrataDadosPl.get(i).getCliente());
placa.setPlaca_fixa(listPrvTrataDadosPl.get(i).getPlaca_fixa());
placa.setPlaca_mercosul(listPrvTrataDadosPl.get(i).getPlaca_mercosul());
int id = placa.getCliente();
String fixa = placa.getPlaca_fixa();
String mercosul = placa.getPlaca_mercosul();
try {
procedure = "transforma_placa";
StoredProcedureQuery queryTP = previsaoCrud.getEntityManager().createNamedStoredProcedureQuery(procedure);
queryTP.setParameter("mercosul", mercosul);
queryTP.setParameter("id", id);
queryTP.setParameter("fixa", fixa);
queryTP.execute();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso!", "Correção de Placas Concluído com Sucesso!"));
} catch (Exception ex) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERRO!", "Erro ao executar processo " + procedure + ", por gentileza, informe a T.I." + ex.getMessage()));
}
}
}
// task 3
try {
procedure = "trata_dados_previsao_checklist";
StoredProcedureQuery queryTDPC = previsaoCrud.getEntityManager().createNamedStoredProcedureQuery(procedure);
queryTDPC.setParameter("numTipoProduto", numTipoProduto);
queryTDPC.setParameter("codCicloFatProduto", codCicloFatProduto);
queryTDPC.setParameter("dt_inicio", this.dtInicial);
queryTDPC.execute();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso!", "Tratamento de Dados dos Checklists Concluído com Sucesso!"));
} catch (Exception ex) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERRO!", "Erro ao executar processo " + procedure + ", por gentileza, informe a T.I." + ex.getMessage()));
}
}
Once again... I need to show the "FacesMessage" as soon the task ends but before the end of the Method like:
[ 0% ]
Starting Task
--
[ 2% ]
Starting Task
Running Part 1
--
[ 50% ]
Starting Task
Running Part 1
Running Part 2
--
etc.
Not necessarily need to use ProgressBar and percentage but something like this, showing a "step by step" of what the Method is working on.
I am using Java(EE) jdk1.8.0_211 (it's an old project) on Eclipse Neon 3 and PrimeFaces 6.1.
I tried using Ajax ProgressBar but it won't stop till the method finishes completely.