Tutorial: Técnicas de Geração de Relatórios com JasperReports / iReport
Uma abordagem utilizando a ferramenta de design iReport
Por diversas vezes tenho me deparado com pessoas no CEJUG e em diversos fóruns Java com dificuldades na geração de relatórios com o JasperReports ou na utilização do iReport como ferramenta visual de diagramação dos documentos.
Foi então que tive a idéia de disponibilizar esse tutorial no meu blog que mostra como criar relatórios no iReport através de três técnicas: passando uma conexão com o banco de dados, passando um ResultSet (encapsulado na classe JRResultSetDataSource) e passando uma lista de objetos (encapsulada na classe JRBeanCollectionDataSource).
Além da demostração de como gerar os relatórios, mostro também o código Java correspondente de cada método, dou algumas dicas para modificar os textFields dos relatórios e outras de utilização do próprio iReport.
Resolvi também disponibilizar a aplicação que criei em JSF no formato zip e war. Bom proveito a todos.
Clique aqui para baixar o PDF do tutorial.
Clique aqui para baixar o projeto do Eclipse compactado (zip).
Clique aqui para baixar o projeto no formato war.
Agora da para ter uma boa noção de como iniciar os estudos com IReport, tenho certeza que será de grande valia para muitas pessoas que necessitam criar relatórios.
Fiquei feliz que em seu primeiro post, você veio com todas as forças e poderes, para demonstrar um conteúdo tão necessário.
Esta de Parabens.
Ythalo, obrigado pelo seu comentário. O desafio agora é continuar atualizando o conteúdo.
Parabéns pela iniciativa Pablo! Gostei do tutorial!
Oi Loiane. Dei uma olhada no seu site também. Muito legal. Parabéns pela formatura.
Excepcional!!!!!!!!
Muito obrigado!
Que bom ter pessoas que compartilham seus conhecimentos
Olá Pablo, realmente dos materiais que conheço este é o mais atual e também o mais completo. Estou tentando aplicar a meu projeto mas tenho um erro. Vou postar aki para você me dar uma dica.
Segue:
private String getContextPath() {
HttpSession session = (HttpSession)
FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getContextPath();
}
A linha return session.getServletContext().getContextPath(); acusa erro no método getContextPath(). E o eclipse pede para eu fazer a seguinte modificação:
return ((RelatorioUsuario) session.getServletContext()).getContextPath();
Só que quando eu rodo o projeto uma exceção é lançada em tempo de execução:
java.lang.ClassCastException: org.mortbay.jetty.servlet.Context$SContext cannot
be cast to br.com.projetobase.report.RelatorioUsuario
at br.com.projetobase.report.RelatorioUsuario.getContextPath(RelatorioUs
uario.java:104)
at br.com.projetobase.report.RelatorioUsuario.preenchePdf(RelatorioUsuar
io.java:79)
at br.com.projetobase.report.RelatorioUsuario.geraRelatorio(RelatorioUsu
ario.java:38)
at br.com.projetobase.bean.UsuarioBean.relatorioGeral(UsuarioBean.java:3
22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Eu entendo que não da para converter uma String retornada em um UsuarioBean, como posso resolver isto?
Olá Anderson. O método getContextPath serve para retornar o nome da aplicação no container e ajuda a encontrar o local do relatório na aplicação.
O erro do seu projeto é que deve estar sendo realizado um import incorreto.Isso pode ser verificado pelo trace da exception, onde diz que org.mortbay.jetty.servlet.Context não pode ser convertido em RelatorioUsuario. Na verdade, esse método getServletContext é para retornar um ServletContext, do pacote javax.servlet.
O que você deve fazer é tirar esse cast e verificar se a classe HttpSession utilizada no método é do pacote javax.servlet.http.
Qualquer coisa, pode escrever no meu e-mail que fica melhor: pablonobrega2004@gmail.com
Abraço.
Pablo funcionou sim, mas não foi o pacote errado e sim a lib do pacote javax.servlet q estava errado. É pra ser a versão 2.5 e estava a 2.4.
Grato!