0

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.

Jasper de Vries
  • 19,370
  • 6
  • 64
  • 102

0 Answers0