Ireport com JRBeanCollectionDataSource bean [Resolvido]

1 resposta
JotaJota

E ae galera
eu estou usando Subreport
passando como parametro por bean uma Collection que é gerada a partir de uma consulta

o codigo esta assim:

receptor.adicionaParametro(“subReport1”,new JRBeanCollectionDataSource(Collection));

subReport é um parameter do tipo Object no relatorio
onde meu subReport do relatorio vai estar associado a ele
em Connection /DataSource Expression

*Eu apenas fiz uma condição pois  dois tipos de Subrelatorios

quando o usuario seleciona o tipo do relatorio igual a ao tipo UM(quantidade menor de informação)

ele imprime o primeiro subreport

quando o parametro for = ao tipo DOIS (com mais tabelas de dados)

ele imprime o segundo subreport

essa condição eu fiz em Print Whem Expression do subreport

uma verificação do tipo assim (if ternario)

($FtipoRelatorio.equals("01") ? $PsubReport1 : $PsubReport2 )

o problema é o erro qeu dá
acontece um class cast exception

Caused by: javax.faces.el.EvaluationException: /emitirRelatorio.xhtml @556,85 action="#{controler.geraRelatorio}":excecao.Excecao: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : Source text : ($P{codTipoProposta} == "02" ? $P{subReport2} : $P{subReport1}) at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:73) at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61) ... 38 more Caused by:excecao.Excecao: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : Source text : ($P{tipoRelatorio} == "02" ? $P{subReport2} : $P{subReport1}) at... Caused by: java.lang.ClassCastException: net.sf.jasperreports.engine.data.JRBeanCollectionDataSource at RelatorioDetalhado_1211228740658_267813.evaluate(RelatorioDetalhado_1211228740658_267813:289) at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:186) ... 85 more

achei qeu fosse a condição mas nao era
acho qeu é o tratamento do if…
por alguma razão ele nao executa o subreport em questao…
ja tentei de tudo nesses ifs…

e levei a conclusão que eh no resultado desse if…
por alguma razão ele nao esta tratando os subReports

Como faço para corrigir esse problema?
Alguem tem ideia do que esta acontecendo?

Atenciosamente

1 Resposta

JotaJota

Bom dia galera … eu consegui resolver esse problema
bom vamos as soluções depois eu tento explicar

a grande chave dessa dúvida é pq eu quis criar dois subreports
uma aparece quando a outra nao aparecer… essa variação estará definida pelo usuario: o tipo de relatorio que ela desejaria: simples/Sofisticado

em cada Subreport eu tenho que fazer um Connection/ DataSource Expression apontando para algum parametro que foi recuperada de uma pesquisa (simples ou não)

O caminho do subreport continua o mesmo
e o que irá variar é somente na Propoertie: PRINT WHEN EXPRESSION do subReport

imagine qeu numa consulta simples eu apenas trago informações basicas
e na consulta sofisticada eu cada registro de minha tabela pode ter uma lista de outros objetos associado a ele:

condição para o subrelatorio simples - subReport1():

new Boolean($P{codTipoRelatorio} != "02")

// Imprima esse subrelatorio somente quando tipoRelatorio != 02 (ou seja, diferente de relatorio sofisticado)

no outro subReport eu faço uma condição diferente:

new Boolean($F{listaValores} != null)

/* este relatorio do tipo Sofisticado vai ter uma listaVAlores do tipo object que vai ser populada em minha **consulta. logo ele somente vai imprimir se essa lista de valores for diferente de null
*/

Enfim

agora falta entender porque ele nao aceitou aquelas duas verificões que eu estava usando

(Para quem não se lembra:

SubReport1. ($FtipoRelatorio.equals(01) ? $PsubReport1 : $PsubReport2 )

SubReport2. ($FtipoRelatorio.equals(02) ? $PsubReport2 : $PsubReport1 )  )

mas com essas soluções eu resolvi todos os meus problemas e agora os registros estão vindo normal
quem quiser opinar… mesmo com o problema resolvido : esta aberta à discussão

Agradeço a atenção de todos

Abração

Criado 20 de maio de 2008
Ultima resposta 21 de mai. de 2008
Respostas 1
Participantes 1