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>
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.