JasperReports: apresentando uma lista do tipo ArrayList

Bysutradi

JasperReports: apresentando uma lista do tipo ArrayList

Existem vários frameworks e ferramentas para gerar arquivos PDFs usando JAVA, sendo a dupla JasperReports/iReport uma das mais utilizadas.

Em relatórios, é comum a necessidade de apresentar uma listagem qualquer. Abaixo mostrarei como fazer uma lista no JasperReport 4.5 através de subDataset, jr:list e jr:listContents. Vamos aos passos:

Passo 1: criar uma classe Vo/TO com um método getMe que retorna this. O código abaixo não apresentará construtores e métodos get/set.

[sourcecode language=”java”]
public MinhaClasse implements Serializable {

private int id;
private String nome;

public MinhaClasse getMe() {
return this;
}

// Métodos get/set foram suprimidos

}
[/sourcecode]

Passo 2: no iReport, adicione um subDataset e um parâmetro do tipo ArrayList. Este dataSet será composto por um conjunto de Fields que serão usados na apresentação da lista. O parâmetro do tipo ArrayList será o responsável por receber a lista com objetos do tipo MinhaClasse.

[sourcecode language=”xml”]
<subDataset name="dataset1">
<field name="id" class="java.lang.Integer">
<fieldDescription><![CDATA[me.id]]></fieldDescription>
</field>
<field name="nome" class="java.lang.String">
<fieldDescription><![CDATA[me.nome]]></fieldDescription>
</field>
</subDataset>

<parameter name="listaMinhaClasse" class="java.lang.Integer"/>
[/sourcecode]

Passo 3: no iReport, adicione o componente jr:list. No código abaixo, informaremos que a lista terá como dataSource o objeto dataSet que definimos anteriormente.

[sourcecode language=”xml”]
<!– O componente abaixo foi colocado na estrutura detail/band/componentElement –>

<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">

<!– Informando que o DataSource da lista é nosso parâmetro ArrayList–>

<datasetRun subDataset="dataset1">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listaMinhaClasse})]]></dataSourceExpression>
</datasetRun>

<!– Aqui faremos a iteração da lista –>

<jr:listContents height="157" width="555">
<staticText>
<reportElement x="4" y="10" width="121" height="20"/>
<textElement/>
<text><![CDATA[ID:]]></text>
</staticText>
<staticText>
<reportElement x="4" y="40" width="111" height="20"/>
<textElement/>
<text><![CDATA[NOME:]]></text>
</staticText>

<textField>
<reportElement x="137" y="10" width="398" height="20">
<printWhenExpression><![CDATA[$F{id} != null]]></printWhenExpression>
</reportElement>
<textElement/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="137" y="40" width="398" height="20">
<printWhenExpression><![CDATA[$F{nome} != null]]></printWhenExpression>
</reportElement>
<textElement/>
<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
</textField>

</jr:listContents>
</jr:list>
[/sourcecode]

Escrevi sobre este assunto:

  • porque achei a abordagem de usar o componente jr:list interessante;
  • porque NÃO achei exemplos do uso do jr:list no site do JasperReport (há somente documentação do componente e atributos).

Espero que este código consiga ajudá-lo em seus projetos.

About the Author

sutradi administrator

2 Comments so far

Douglas da SilvaPosted on  9:47 am - Mar 23, 2012

Fábio bom dia,

Você pode criar um compliado do seu “template” de relatório e em tempo de execução apenas passar o seu List.

Na Thread abaixo há um exemplo:

http://groups.google.com/group/javasf/browse_thread/thread/a7dc7fd2f76ff2db/d2bb2f17933570ce?q=hibernate+%2B+relatorio+pdf&lnk=nl&amp;

Procure criar seu relatório pela ferramenta visual, para relatórios mais complexos trabalhar a nivel de xml vai ficar inviavel.

Att.

Douglas

    Fábio QueirozPosted on  9:52 am - Mar 23, 2012

    Olá Douglas.

    É feito exatamente isso. Neste post coloquei apenas o trecho de código XML (relevante para o post) gerado pelo iReport.

    A intenção deste post era meramente mostrar o componente jr:list.

    Mas bom comentar, pois aumenta os exemplos para os leitores.

Leave a Reply