public class Pessoa { String nome; Date nascimento; Endereco endereco; List<String> telefones; // ... Gets e Sets omitidos ... } public class Endereco { String rua; short numero; // ... Gets e Sets omitidos ... }
Agora vou preencher o relatorio com uma lista de pessoas:
Listpessoas = loadPessoas(); ColecaoDataSource dataSource = new ColecaoDataSource(eu); JasperReport compilado = JasperCompileManager.compileReport("/tmp/Relatorio.xml"); JasperPrint preenchido = JasperFillManager.fillReport(compilado, new HashMap(), dataSource); JasperViewer.viewReport(preenchido);
No seu relatorio, para acessar os campos da Pessoa, basta declarar os campos da mesma forma como foi feita com a classe ObjetoDataSource. Viu como é fácil?
Agora digamos que ao invés de List, queremos utilizar um Map. É a mesma coisa, só a declaração dos campos no relatório fica um pouco diferente. Isso porque passamos a iterar não por objetos Pessoa, mas por objetos Entry. Veja abaixo:
Map<Integer,Pessoa> pessoas = loadPessoas(); ColecaoDataSource dataSource = new ColecaoDataSource(eu); JasperReport compilado = JasperCompileManager.compileReport("/tmp/Relatorio.xml"); JasperPrint preenchido = JasperFillManager.fillReport(compilado, new HashMap(), dataSource); JasperViewer.viewReport(preenchido);
No relatório então, os campos ficariam assim:
No seu relatorio, para acessar os campos da Pessoa, basta declarar os campos da seguinte forma:
<field name="key" class="java.lang.Integer" /> <field name="value.nome" class="java.lang.String" /> <field name="value.nascimento" class="java.util.Date" /> <field name="value.telefones" class="java.lang.Object" /> <field name="value.endereco.rua" class="java.lang.String" /> <field name="value.endereco.numero" class="java.lang.Short" />
Simples não é?
Ola. ficou mto bem explicado mesmo,agora estou com uma duvida:
ResponderExcluirComo se chama um Relatorio Mestre+ 1 subrelatorio ?
Saudações, irmão. Estava dando uma lida no teu tutoria e esbarrei com uma dúvida. O que seria este "ColecaoDataSource"??? É o mesmo que o JRBeanCollectionDataSource???
ResponderExcluirElimarcos, pra falar a verdade, bem que pode ser. Já faz um bom tempo que não trabalho com o jasperreport e não tenho informações suficientes pra te dizer se esta classe é semelhante a JRBeanCollectionDataSource.
ResponderExcluir