olá Pessoal,
No post de hoje, vou apresentar como gerar relatorios de uma base de dados sendo uma aplicação JEE. Em outro post, mostrei como gerar relatorios usando Java Basico com Hibernate, aqui vamos manter a mesma estrutura técnica a diferença apenas que será com foco para JEE. Espero que gostem.
Lets go…
Requisitos
Starting…
Para gerar relatorios em ambiente JEE, há algumas mudancas a nivel de codigo que sofrem alterações, porem tudo de ireport com BD é mantido.
passo 1
- criar o layout no ireport e fazer a conexao com o banco de dados e definir as colunas do relatorio, enfim definir a estrutura do relatorio
passo 2
- criar a classe de conexao com banco de dados – Hibernate
- Criar o bean
passo 3
- cria um package exclusivo para o relatorio e uma classe, por questao de organizacao importar o jrxml para o projeto e para o package do relatorio por medida de seguranca
passo 4
- para que o arquivo seja gerado na pagina WEB, eh preciso mudar algumas coisas no metodo responsavel por gerar o relatorio:
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
ServletOutputStream responseStream = response.getOutputStream();
InputStream caminho = getClass().getResourceAsStream(“../relatorio/reportblog.jrxml”);
response.setContentType(“application/pdf”);
-
criar um context e objetos de resposta.
-
Fazemos um stream do caminho onde esta o jrxml. Quando temos dois pontos antes da barra significa que temosum caminho diferente da classe que gera o relatorio
- depois um response que informa o tipo do conteudo para o browser saber qual aplicativo chamar caso ele tenha suporte response.setContentType(“application/pdf”);
Na linha a seguir informamos como sera o nome do arquivo a ser gerado
response.setHeader(“Content-Disposition”,”attachment; filename=\”relatorio.pdf\””);
Abaixo temos o padrao para invocao
JasperReport pathReport = JasperCompileManager.compileReport(caminho);
//relatorio gerado
JasperPrint preencher = JasperFillManager.fillReport(pathReport, null,new JRBeanCollectionDataSource(listaUS));
JasperExportManager.exportReportToPdfStream(preencher,responseStream);
responseStream.flush();
responseStream.close();
context.renderResponse();
context.responseComplete();
O resultado
O resultado eh que ao inves de ter um arquivo que é direcionado para um local, ele aparece no browser (firefox, Chrome, IE) do usuario. E o browser decide como vai apresentar esse arquivo. Por exemplo, no FireFox, ele aprende o arquivo no proprio Browser, no Internet Explorer ele abre uma Janela onde o usuario decide se vai abrir ou fazer o download.
JasperViewer
O JasperViewer eh forma de exibir o relatorio em applet, ao inves de usar o browser, pode ser ate mais amigavel que usar o proprio browser, mas deve ser analizado o tempo de carregado disso em producao, basta adiciona a linha abaixo
JasperViewer.viewReport(preencher, false);
E desabilitar as linhas referente ao browser, para que nao seja executada em paralelo
response.setContentType(“application/pdf”);
response.setHeader(“Content-Disposition”,”attachment; filename=\”relatorio.pdf\””);
Vou ficando por aqui, espero que tenham gostado do post.
Abracos, see ya! Have a nice week, guys!