Problema com <p:fileDownload> Primefaces

1 resposta
rodrigo.fai

Criei um botão responsável por fazer o download de um relatório da seguinte forma:

<p:commandButton id="btnImprimeSimulação"  
                     icon="ui-icon-print"  
                     actionListener="#{acaoMBean.preparaImpressaoSimulacaoAcordo}"  
                     value="Imprimir"  
                     title="Imprime essa simulação"  
                     style="width:100px;">  
       <p:fileDownload value="#{acaoMBean.file}" />  
    </p:commandButton>

O código do método que gera o relatório é o seguinte:

public void preparaImpressaoSimulacaoAcordo(ActionEvent actionEvent) throws Exception {  
                     
                  .  
                  .  
                  .  
      
        ClientOutput clientOutput = new ClientOutput();  
        //FacesContext facesContext = FacesContext.getCurrentInstance();  
        //facesContext.getExternalContext().getRequest();  
        //HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();  
        //OutputStream os = null;  
      
        try {  
            String reportUrlReal = clientOutput.getApplicationRoot()+"\\WEB-INF\\classes\\rptAcordoSimulacao.jasper";  
      
            JasperPrint jasperPrint = JasperFillManager.fillReport(reportUrlReal, mapa, ds);  
            byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint);  
      
            //os = response.getOutputStream();  
            clientOutput.getResponse().setContentType("application/pdf");  
            clientOutput.getResponse().setContentLength(pdf.length);  
            clientOutput.getResponse().setHeader("Content-disposition","attachment; filename=\"rptAcordoSimulacao.pdf\"");  
            clientOutput.getOutputStream().write(pdf);  
            clientOutput.getOutputStream().flush();  
      
            //ExternalContext externalContext = clientOutput.getFc().getExternalContext();  
            //InputStream input = externalContext.getResourceAsStream("/WEB-INF/classes/rptAcordoSimulacao.jasper");  
      
            InputStream input = clientOutput.getServletContext().getResourceAsStream("/WEB-INF/classes/rptAcordoSimulacao.jasper");  
      
            this.file = new DefaultStreamedContent(input, "application/pdf", "rptAcordoSimulacao.jasper");  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally{  
            try {  
                if(clientOutput.getOutputStream() != null){  
                    clientOutput.getOutputStream().close();  
                }  
                clientOutput.responseComplete();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }

Após clicar no botão e gerar o relatório a caixa de diálogo de download não é exibida!

Alguém sabe me dizer porque?

Obrigado.

1 Resposta

rodrigo.fai

Resolvi o problema colocando o botão dentro de um <p:dialog>! A janela para o donwload foi exibida normalmente agora!
O porque de funcionar somente dentro de um <p:dialog> eu não sei!!! Se alguém conseguir me responder… agradeço!!!

Criado 23 de maio de 2013
Ultima resposta 23 de mai. de 2013
Respostas 1
Participantes 1