ArrayList no iReport

Hey galera.

Tenho um relatorio do iReport que lista e exibe os atributos de uma serie de objetos x.
Essa parte funciona perfeitamente… até a hora que eu decidi exibir uma list (que é um dos atributos dos meus objetos).

Para faze-lo, criei um segundo report, adicionei ao meu report principal como sub report e defini a “Expressão de fonte de dados” como o atributo dos meus objetos que é a lista.

Tudo compila perfeitamnete, mas ao executar eu recebo esse erro:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to net.sf.jasperreports.engine.JRDataSource
at designatedsReport_1230641477316_862960.evaluate(designatedsReport_1230641477316_862960:267)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:186)

Não tenho idea do que posso ter feito de errado muito menos tenho experiencia com iReport. Ja cheguei algumas pesquisadas na internet mas não encontrei nenhuma solução.

Grato.

Eu não entendia nada de iReport esse tutorial me ajudou muito.
Dá uma olhada:
http://www.furutani.eti.br/tutoriais/Mini-Tutorial_Relatorios_Java_JasperReports_e_iReport.pdf

Olá, estou com o mesmo problema do Mikhas: tenho um objeto Cláusula que possui como atributo um ArrayList de Seções ($F{secoes}), aí esse objeto Seções possui como atributo um ArrayList de Subseções ($F{subsecoes})e preciso dessa estrutura no relatório. Criei um relatório principal que possui um subrelatório e este tem outro subrelatório. Mas quando eu executo dá erro…

java.util.ArrayList cannot be cast to net.sf.jasperreports.engine.JRDataSource

Isso enquanto está tentando avaliar $F{subsecoes} (Error evaluating expression : Source text : $F{subsecoes}).

Não encontrei nada na Internet que indicasse um caminho para uma solução :frowning:
Agradeceria muito se alguém pudesse me ajudar…

Mariana

Mariana, pelo pouco que sei você tem que passar este ArrayList como parâmetro para o subrelatório, vocês esta fazendo isso, mas parece que além disso o subrelatório tá esperando um JRDataSource, ou seja uma fonte de dados, ela tem que ser passada como paramêtro também.
Se não conseguir posta seu código, quem sabe fica mais fácil analisar…
Espero ter ajudado!

[quote=Mikhas]Hey galera.

Tenho um relatorio do iReport que lista e exibe os atributos de uma serie de objetos x.
Essa parte funciona perfeitamente… até a hora que eu decidi exibir uma list (que é um dos atributos dos meus objetos).

Para faze-lo, criei um segundo report, adicionei ao meu report principal como sub report e defini a “Expressão de fonte de dados” como o atributo dos meus objetos que é a lista.

Tudo compila perfeitamnete, mas ao executar eu recebo esse erro:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to net.sf.jasperreports.engine.JRDataSource
at designatedsReport_1230641477316_862960.evaluate(designatedsReport_1230641477316_862960:267)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:186)

Não tenho idea do que posso ter feito de errado muito menos tenho experiencia com iReport. Ja cheguei algumas pesquisadas na internet mas não encontrei nenhuma solução.

Grato.[/quote]

Vc pode criar uma classe java do qual vc faz uma busca dos seus registros em metodo criado numa classe dao contendo uma consulta, e mandar essa lista por parametro para interface JRDataSource instanciado a classe JRBeanCollectionDataSource.
ex:

 JRDataSource jrds = new JRBeanCollectionDataSource(suaListaCarregada);  

E no classpath do iReport vc aponta os seus arquivos .class contendo o seus java beans, para ele reconher e setar os campos fields corretamente.
Aqui tem um exemplo de uma olhada no ultimo post. Boa Sorte!

Por favor alguem posta essa solução. Também estou com esse problema

Provavelmente você deve ter setado como parâmetro para o relatório a sua List, o que causaria o erro ao tentar passá-la para o sub-relatório como uma fonte de dados.

A solução seria criar um parâmetro do tipo net.sf.jasperreports.engine.JRDataSource e passar para ele um JRBeanCollectionDataSource, e este, por fim, seria passado do relatório principal para o sub relatório como uma fonte de dados.

Ex:

Collection minhaLista = new ArrayList(); JRDataSource dataSource = new JRBeanCollectionDataSource(minhaLista); Map params = new HashMap(); params.put("NOME_PARAMETRO", dataSource);

No seu relatório principal você cria um parâmetro chamado NOME_PARAMETRO (por exemplo), que será do tipo net.sf.jasperreports.engine.JRDataSource.

No objeto subreport você informa $P{NOME_PARAMETRO} como a expressão de conexão/fonte de dados.

Não sei se deu para entender…
;s

Valeu,

eu coloquei um new JRBeanCollection($F{lista}) e funcionou :slight_smile:

Estava com este mesmo problema e foi resolvido quando adicionei o class path no ireport, segundo o amigo acima comentou :slight_smile:
Problema resolvido.