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 digamos que a gente possui uma intância da classe Pessoa e desejamos imprimir todos seus campos em um relatório Jasper. Para fazer isso basta instanciar um novo ObjetoDataSource, como mostrado abaixo:
Pessoa eu = loadPessoa(); ObjetoDataSource dataSource = new ObjetoDataSource(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 seguinte forma:
<field name="nome" class="java.lang.String" /> <field name="nascimento" class="java.util.Date" /> <field name="telefones" class="java.lang.Object" /> <field name="endereco.rua" class="java.lang.String" /> <field name="endereco.numero" class="java.lang.Short" />
Repare que o campo telefones é declarado como Object, porque a resposta dele não é um List, e sim um ColecaoDataSource. Isso é feito para que se você possa iterar nele utilizando um SubReport.
Neste exemplo, o relatório possuiria apenas uma pessoa, no caso de termos que exibir várias pessoas utiliza-se o ColecaoDataSource. Ou poderiamos ter uma classe, por exemplo, Equipe que possui um atributo do tipo List
muito bom essa lib!
ResponderExcluirmas e se a classe Pessoa tivesse um atributo Collection"<"Empresa">" empresas.
e Empresa tivesse atribuitos como codigo e nome
tenho q mostrar os atributos de cada pessoa acompanhado dos atributos de cada empresa que esta pessoa está vinculada
como acessaria os atributos de cada empresa da coleção para exibir no relatório?!
Fabricio você precisa colocar a listagem das embresas em um subreport.
ResponderExcluirOi, como passaria a minha List para um subrelatorio Tiago.Obrigado e t+.
ResponderExcluirMuito bacana o seu post!