Bom dia galera,
bem a forma que eu fiz agora está funcionando.
Eu tive que retirar o Ajax para funcionar, ou seja, eu troquei o a4j:commandButton, pelo h:commandButton,
e coloquei tudo dentro de um <h:form>.
e abaixo está o meu método que gera o relatório:
public void geraRelatorioPassandoListaDeObjetos() throws ClassNotFoundException, SQLException, JRException, IOException {
// Conexão com o banco para o segundo relatório
this.criaConexao();
conexao = getConexao();
// criação dos parametros
Map<String, Object> map = new HashMap<String, Object>();
// conexão com o banco que será utilizada pelo subrelatório
map.put("REPORT_CONNECTION", conexao);
//map.put("IMAGE",diretorioReal+"/images/loma.jpg");
// pego o caminho do diretório onde se encontra o subrelatório
//map.put("SUBREPORT_DIR", getDiretorioReal("/pages/relatorios/relatorios/"));
ArrayList<Abastecimento> relatorio = new ArrayList<Abastecimento>();
relatorio = (ArrayList<Abastecimento>) abastecimentoService.retrieveAll();
//getListaAlunos(conexao);
JRBeanCollectionDataSource ds = new
JRBeanCollectionDataSource(relatorio);
/*
* Mando o jasper gerar o relatório. Nesse caso passo o map,
* já que ele tem dois parâmetros que serão utilizados
*/
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
String diretorioReal = session.getServletContext().getRealPath("");
String caminhoRelatorio = diretorioReal+ "/pages/relatorios/relatorios/RelatorioAbastecimento.jasper";
JasperPrint print = JasperFillManager.fillReport(caminhoRelatorio, map, ds);
JasperExportManager.exportReportToPdfFile(print, diretorioReal+ "/pages/relatorios/relatorios/RelatorioAbastecimento.pdf");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=RelatorioAbastecimento.pdf");
response.sendRedirect(context.getExternalContext().getRequestContextPath()
+
"/pages/relatorios/relatorios/RelatorioAbastecimento.pdf");
context.responseComplete();
// gerarRelatorio(caminhoRelatorio,print);
//return "/RelatorioAbastecimento.pdf";
}
Só tenho 2 observações a fazer ( para mim, ainda são 2 problemas)
Primeiro: ele só abre, depois que eu dou 2 cliques no botão. Ou seja,
se eu clicar a primeira vez, ele não faz nada. Mas na segunda, ele abre o relatório.
Segundo: O botão só funciona no FIREFOX, ou seja, eu testei no google Chrome, e ele não aparece … ele apenas da um refresh na página.
Vocês poderiam me ajudar ??