[RESOLVIDO]Após salvar relatorio em PDF a pagina trava

4 respostas
M

Boa tarde Senhores!

Estou desenvolvendo um sistema que gera um relatorio iReport, após o usuario clicar no botao de finalização é exibido na tela um popup com as opções de salvar o arquivo ou exibir um PDF, até ai tudo bem, o PDF é exibido e ou o arquivo é salvo com sucesso, o problema é que apos essa ação, a aplicação trava...não redireciona para a pagina desejada e nem permite nenhuma ação (o codigo-fonte da tela fica vazio). segue o método que gera o PDF:
public void imprimirContrato(BeneficiariaVo beneficiaria, ProdutoVo produto, RepresentanteVo representante, List<PortadorVo> portadores, long codProposta, int tipoOperacao) {
        FacesContext context = FacesContext.getCurrentInstance();
        ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();
        String pathLogo = servletContext.getRealPath("/images/");

        List<DadosRelatorioVo> parametros = GeraRelatorio.retornarDadosRelatorio(pathLogo, beneficiaria, produto, representante, portadores, codProposta, tipoOperacao);
        List<PortadorVo> subParametros = new ArrayList<PortadorVo>();
        JRBeanCollectionDataSource jrds = new JRBeanCollectionDataSource(parametros);

        subParametros.addAll(portadores);

        JRBeanCollectionDataSource subJrds = new JRBeanCollectionDataSource(subParametros);

        try {
            String pathJasper = servletContext.getRealPath("/reports/Contrato.jasper");
            String pathSubReport = servletContext.getRealPath("/reports/subRelatorioPortadores.jasper");
            JasperPrint impressao = new JasperPrint();
            // parametros do subrelatorio
            Hashtable ht = new Hashtable();
            ht.put("portadores", subJrds);
            ht.put("subDir", pathSubReport.replace("\\", "/"));

            impressao = JasperFillManager.fillReport(pathJasper, ht, jrds);
            byte[] bytes = JasperExportManager.exportReportToPdf(impressao);

            // Essa é a configuração do pop´up que será apresentado
            FacesContext facesContext = FacesContext.getCurrentInstance();
            HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();

            ServletOutputStream ouputStream = response.getOutputStream();
            response.addHeader("Content-disposition", "attachment;filename=Contrato" + codProposta + ".pdf");
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);

            // Esse popula o arquivo que será aberto ou salvo
            ouputStream.write(bytes, 0, bytes.length);
            ouputStream.flush();
            ouputStream.close();
            response.flushBuffer();
            context.responseComplete();

        } catch (Exception ex) {
            ex.printStackTrace();
            FacesUtils.addErrorModalMessage(ex.getMessage());
            irConsultar();
        }
    }

só para informar, a versão do iReport é 0.5.0. Alguem ja passou por esse mesmo problema?

4 Respostas

M

Alguem?

Gerva

Não seria melhor procurar uma versão mais atual do IReport?
Em qual navegador você está fazendo isso?
Tentou direcionar o relatório para uma outra aba para ver o que acontece com a aplicação?

M

Gerva:
Não seria melhor procurar uma versão mais atual do IReport?
Em qual navegador você está fazendo isso?
Tentou direcionar o relatório para uma outra aba para ver o que acontece com a aplicação?

Infelizmente o cliente não permite utilizar uma versão mais atual.
O erro ocorre em qualquer navegador.
Ainda não tentei… vou testar!

M

Bom pessoal, desculpa reativar o topico, só quero dizer que consegui solucionar o problema! alterei alguns componentes de tela e tratei a response de outra forma! o problema foi direcionar a pagina depois, mas ai é so criar um processamento paralelo! Obrigado pela ajuda!

Criado 27 de março de 2012
Ultima resposta 17 de abr. de 2012
Respostas 4
Participantes 2