Olá pessoal, boa noite.
Seguinte, já andei pesquisando por ai diversas formas de gerar o relatorio no browser do cliente.
Infelizmente, ao executar os métodos para geração do mesmo, nada acontece. Ao ser acionado
o commandButton na página onde os filtros são preenchidos, continua na mesma página. Ele chega a executar completamente os métodos, não exibindo nenhum erro no console.
Segue o código abaixo, se alguém tiver idéia do que está acontecendo:
public void geraRelatorio() {
context = FacesContext.getCurrentInstance();
servletContext = (ServletContext) context.getExternalContext().getContext();
String caminhoRelatorio = servletContext.getRealPath("/relatorios/jasper");
relatorioPedidosCliente = caminhoRelatorio + "\\RelatorioPedidosCliente.jasper";
parametroMap = new HashMap<String, Serializable>();
String sql = montaSQL(cliente.getIdCliente(),
dataInicio != null ? Funcoes.formataDataEmString(dataInicio) : "",
dataFim != null ? Funcoes.formataDataEmString(dataFim) : "");
parametroMap.put("sql", sql);
/* criando novo cliente apos passagem de parametro para nova pesquisa */
cliente = new Cliente();
String dataIni = dataInicio != null ? Funcoes.formataDataEmString(dataInicio) : "00/00/0000";
String dataF = dataFim != null ? Funcoes.formataDataEmString(dataFim) : "00/00/0000";
String periodo = "Período de: " + dataIni + " a " + dataF;
parametroMap.put("periodo", periodo);
enviarPdf();
}
public void enviarPdf() {
try {
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
// Configura o response para suportar o relatório
response.setContentType("application/pdf");
response.addHeader("Content-disposition", "inline; filename=\"arquivo.pdf\"");
// Preenche o relatório com os parametros e o data source
JasperPrint jasperPrint = JasperFillManager.fillReport(relatorioPedidosCliente, parametroMap, HibernateUtil.recuperaConexao());
// Exporta o relatório
JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
// Salva o estado da aplicação no contexto do JSF
context.getApplication().getStateManager().saveSerializedView(context);
// Fecha o stream do response
context.responseComplete();
} catch (Exception e) {
System.out.println(e);
}
}
Detalhe, as libs iText e o Poi estão devidamente na pasta lib da aplicação e estão funcionando normalmente. O relatório também está ok,
pois executando o comando para o mesmo ser visualizado este funciona: JasperViewer.viewReport(impressao, false);
Agradeço desde já,
Att,
Lessandro