Você está na página 1de 6

Usando o JRBeanCollectionDataSource

25/fevereiro/2009 - Java, Tutoriais


Usando o JRBeanCollectionDataSource Recebi vrios emails perguntando sobre o Jasper/iReport. Recentemente fui questionado com relao ao JRBeanCollectionDataSource e o seu uso para gerar um relatrio utilizando beans. Mostrarei com um exemplo bem simples (sem sub-relatrios) como gerar um relatrio com o Jasper usando o JRBeanCollectionDataSource como fonte de dados, irei fazer um relatrio de livros.

OBS: Em um outro tutorial eu tive o trabalho de criar um DataSource customizado, mas creio que facilmente adaptado para usar somente o JRBeanCollectionDataSource, dispensando o DataSource customizado. Na expresso para o sub-relatrio teria que usar new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(${ListaDisciplinas}) O Fbio Miranda foi quem me questionou sobre esse uso do JRBeanCollectionDataSource, quando tiver mais tempo vou adaptar o tutorial com essas dicas. Me cobrem Foi utilizado o iReport 0.5.3, jdk1.5.0_03 e Windows XP

Primeiro vamos ao bean Livro


view source print?
01.packageexemplo; 02.publicclassLivro { 03. privateString titulo; 04. privateString autor; 05. privateString isbn; 06. privateString editora; 07. privateString descricao; 08. 09.publicLivro(){}<br> 10.// todos getters e setters omitidos}

O relatrio bem simples de ser desenhado, crie um novo relatrio (menu File > new document) e insira os statictext para os textos fixos ("Minha Biblioteca", "Titulo", "Autor", "ISBN", " Editora" e "Descricao") e 5textfields que ficaro em frente aos statictext "Titulo", "Autor", etc.

Quando voc insere o textfield o texto que aparece $F{Field}, para mudar de um duplo clique sobre ele. Vai ser mostrado uma janela como essa:

Altere $F{Field} para $F{titulo} e faa isso com os outros 4 campos. Note que o texto $F{titulo} vai continuar em azul, isso ocorre porque no foi declarado o field titulo. O prximo passo deixar $F{titulo} na cor verde. No menuView, selecione ReportFields. Na janela que ser mostrada clique em New, preencha Field Name titulo, no Field ClassType selecione java.lang.String e no Field Description no coloque nada, clique em Ok. Repita a operao para autor, isbn, editora e descrio, como mostra a figura abaixo.

Uma relao importante a ser ressaltada a dos atributos do bean<>Fields<>TextFields, os nomes devem iguais como mostrado na figura abaixo.

No iReport como no Java maiscula e minscula fazem toda a diferena. Compile o relatrio, menu Build > Compile. Se aparecer algo parecido com isso no console o relatrio est sem nenhum erro.
view source print?
1.Compiling to file... . Livros.jasper -> C:iReport -0.5.3Livros.java 2. it.businesslogic.ireport.ReportClassLoader@1a73d30 3. Compilation running time : 260

Um dos erros mais comuns esse


view source print?
1.Errors compiling .Livros.jasper! 2.it.businesslogic.ireport.ReportClassLoader@e05ad6 3.net.sf.jasperreports.engine.JRException: 4.Report design not valid : 1. Field not found : Titulo

Nesse caso o erro foi causado pelo T maiusculo, o certo t minsculo no TextField expression. Ou se o "t" est minsculo mas o erro continua, deve ser porque no foi declarado no ReportFields. Agora iremos ver a classe que exibi o relatrio. O diferencial est em azul, ao invs de utilizarmos uma Connection vamos usar o JRBeanCollectionDataSource.

view source print?


01.packageexemplo; 02. 03.importjava.io.InputStream; 04.importjava.util.ArrayList; 05.importjava.util.HashMap; 06.importjava.util.List; 07.import java.util.Map; 08. 09.importnet.sf.jasperreports.engine.JRException; 10.importnet.sf.jasperreports.engine.JasperFillManager; 11.importnet.sf.jasperreports.engine.JasperPrint; 12.importnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 13.importnet.sf.jasperreports.view.JasperViewer; 14. 15.publicclassInicio { 16. 17. publicvoidexibirRelatorio() { 18. // Caminho do .jasper do relatorio 19. StringcaminhoRelJasper = "Livros.jasper"; 20. 21. // Lista com beans 22. ListlistaLivros = getLivros(); 23. 24. // Stream com o .jasper 25. InputStream relJasper = getClass() 26. .getResourceAsStream(caminhoRelJasper); 27. 28. <font color="#0000FF">// O datasource 29. JRBeanCollectionDataSource ds = newJRBeanCollectionDataSource( 30. listaLivros);</font> 31. 32. // Parametros do relatorios 33. Mapparametros = newHashMap(); 34. 35. JasperPrintimpressao = null; 36. try{ 37. 38. impressao = JasperFillManager.fillReport(relJasper, parametros, ds); 39. JasperViewer viewer = newJasper Viewer(impressao, true); 40. viewer.setVisible(true); 41. 42. } catch(JRException e) { 43. System.out.println(e.getMessage()); 44. } 45. 46. } 47. 48. publicList getLivros() { 49. List listaLivros = newArrayList(); 50. Livro livro = newLivro(); 51. 52. livro.setTitulo("Use a cabea! Padres de Projeto - Design Patterns"); 53. livro.setAutor("Freeman, Eric / Freeman, Elisabeth"); 54. livro.setIsbn("8576080869");

55. livro.setEditora("Alta Books"); 56. livro 57. .setDescricao("Como voc sabe que no quer reinventar a roda (ou, " 58. + "pior, um pneu furado), " 59. + "ento voc busca padres de projetos"); 60. listaLivros.add(livro); 61. 62. livro = newLivro(); 63. livro.setTitulo("Entendendo e Dominando o Linux"); 64. livro.setAutor("Mor imoto, Carlos"); 65. livro.setIsbn("8589535339"); 66. livro.setEditora("Digerati"); 67. livro 68. .setDescricao("Como o nome diz, este livro uma obra destinada a " 69. + "todos aqueles que " 70. + "pretendem conhecer na prtica e em detalhes os " 71. + "principais recursos oferecidos pelo Linux"); 72. listaLivros.add(livro); 73. 74. livro = newLivro(); 75. livro.setTitulo("Guia de Certificao em Java - Exame CX-310-035"); 76. livro.setAutor("Pereira, Rafael"); 77. livro.setIsbn("8573934263"); 78. livro.setEditora("Cincia Moderna"); 79. livro.setDescricao("Este Guia de Certificao em Java um livro " 80. + "fundamental para preparar os" 81. + " candidatos ao exame de programador Java da Sun, " 82. + "a primeira e mais " 83. + "requisitada certificao desta tecnologia."); 84. listaLivros.add(livro); 85. 86. returnlistaLivros; 87. } 88. 89. publicstaticvoidmain(String[] args) { 90. newInicio().exibirRelatorio(); 91. } 92.}

isso que eu queria passar em caso de dvida me mande um email, assim vou poder melhorar esse tutorial. Download do cdigo fonte Veja tambm meu artigo na Java Magazine sobre iReport.

Leia tambm:
y y y y y

Tutorial de JasperReports usando ArrayList de VO Livro sobre Ruby e Java na faixa Lendo Spring em Ao Saindo de frias! Relatrio Dinmico com JasperDesign