“循序渐进”的进展 Java/PrimeFaces

"Step by step" progress Java/PrimeFaces

提问人:Matheus Daguetti 提问时间:5/5/2023 最后编辑:Jasper de VriesMatheus Daguetti 更新时间:5/5/2023 访问量:46

问:

我需要帮助,因为我找不到这样的东西(或者我不知道如何正确搜索)。

我调用了这个执行多个任务的方法。我需要的是在每个任务结束时在屏幕上显示一条消息,而无需结束方法或让用户再次单击按钮。

这是我的方法:

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()));
        }
    }

再来一次。。。我需要在任务结束后但在方法结束之前显示“FacesMessage”,例如:

[ 0% ]

启动任务

--

[ 2% ]

启动任务

运行第 1 部分

--

[ 50% ]

启动任务

运行第 1 部分

运行第 2 部分

--

等。

不一定需要使用 ProgressBar 和 percentage,而是像这样的东西,显示 Method 正在处理的内容的“一步一步”。

我在 Eclipse Neon 3 和 PrimeFaces 6.1 上使用 Java(EE) jdk1.8.0_211(这是一个旧项目)。

我尝试使用 Ajax ProgressBar,但在方法完全完成之前它不会停止。

Ajax JSF primefaces 进度条

评论

0赞 Jasper de Vries 5/5/2023
请参阅 stackoverflow.com/questions/25947790/...

答: 暂无答案