Gerar relatório e continuar o ciclo de vida

1 resposta
jaimefroilan

Olá estou fazendo a geração de relatório em uma página de cadastr e se
estiver um combo box selecionado tem Salvar e gerar um relatório.
Ao clicar em salvar ele gera o relatório corretamente, salva o
conteúdo que quero persistir, porém o ciclo de vida é afetado pois ao
salvar tem que ir para uma nova página, mas aparece o popup para
salvar o relatório ou abri-lo mas continua na mesma página.
Obrigado

public String incluir() {
                try {
                        dadosForm.validar();
                        this.manterOcorrenciaAlunoEJB.inserir(dadosForm);

===============AQUI ELE CHAMA O MÉTODO PARA IMPRIMIR O RELATÓRIO

                        this.imprimirCarta();

=====================================================================

                        FacesUtil.adicionarMensagemAviso("Inclusão realizada com sucesso");
                } catch (NegocioException e) {
                        e.printStackTrace();
                        FacesUtil.adicionarMensagemErro( e.getMensagens() );
                        return null;
                } catch (Exception e) {
                        e.printStackTrace();
                        FacesUtil.adicionarMensagemErro("Erro ao realizar a inclusão: "  +e.getMessage());
                        return null;
                }
                String retorno = getPaginaPesquisa();
                FacesUtil.getFacesContext().responseComplete();
                return retorno;
        }

 public void imprimirCarta(){
        try {
            //obtem os dados do relatorio
            List<OcorrenciaAluno> dados = new ArrayList();
            dados.add(this.dadosForm);

            //define o path completo do arquivo do relatorio (.jasper)
            String arqJasper = FacesUtil.getRealPath() + "/reports/CartaOcorrenciaAluno.jasper";

            //define os parametros do relatorio
            Map<String, Object> parametros = new HashMap<String,Object>();
            parametros.put("textonotificacao",this.dadosForm.getTextoNotificacao());
            parametros.put("imagem", FacesUtil.getRealPath() + "/images/");

            //gera o relatorio e o envia como resposta para o browser.
            FacesUtil.gerarRelatorioPdf(arqJasper,  //path completo doarquivo .jasper
                                        dados,      //um List contendo os dados do relatorio
                                        parametros, //um Map com os parametros que o relatorio necessita
                                        "CartaOcorrenciaAluno.pdf"); //nome do arquivo PDF
        } catch (Exception e) {
            e.printStackTrace();
            FacesUtil.adicionarMensagemErro(e.getMessage());
        }
    }

public static void gerarRelatorioPdf(String arquivoJasper, List dadosRelatorio, Map<String, Object> parametrosRelatorio, String nomePdf)
                        throws NegocioException {
                try {
                        //obtem o relatorio como PDF através da classe RelatorioJasper
                        //passando o 'arquivo jasper', os 'dados' e os 'parametros' do relatorio (este ultimo
                        //nao eh obrigatorio)
                        byte[] relatorioPdf = RelatorioJasper.gerarPdf(arquivoJasper, dadosRelatorio, parametrosRelatorio);

                        // obtem o objeto response
                        HttpServletResponse response = getResponse();

                        // Define No response o tipo do arquivo que será exibido no
                        // navegador (PDF)
                        response.setContentType("application/pdf");

                        // Configura informações sobre o arquivo no response
                        if (StringUtils.isEmpty(nomePdf)) {
                                nomePdf = "relatorio.pdf";
                        }
                        response.setHeader("Content-disposition", "attachment;filename=" +nomePdf);

                        // Envia os bytes do arquivo PDF, através de um fluxo de dados,para
                        // o browser
                        response.getOutputStream().write(relatorioPdf);

                        // Avisa p/ o 'ciclo de vida JSF' que já terminamos de usar o
                        // response,
                        // logo, os demais passos do ciclo de vida serão executados até que
                        // o
                        // PDF seja exibido em tela, para o usuário
                        getFacesContext().responseComplete();

                } catch (Exception e) {
                        throw new NegocioException("Erro ao gerar o relatorio: "
                                        + e.getMessage());
                }
        }

1 Resposta

fabricioempresa

Cara colocar o código entre CODE que fica mais facil para vizualizar.Muitas pessoas deixam de ver seu código por ele não estar formatado

Valeu

Criado 30 de setembro de 2010
Ultima resposta 30 de set. de 2010
Respostas 1
Participantes 2