JasperReport + Objeto como Parametro

Tem como passar um objeto, como parametro, para o meu relatorio ??

valeu !!

Vala…

Cara tem sim! Basta vc colocar o objeto dentro do HashMap.

Aí vc recupera o objeto dentro do jasper como vc faz em java mesmo.

Coloquei assim :

parameters.put("obj", p);

para passar o objeto como parametro. E lá no jasper declarei uma variavel do tipo Object, chamada obj. Meu problema eh na hora de recuperar a informação. Tentei isso :

$P{obj.Cod_TipoMov}

Onde TipoMov eh um atributo do tipo String, mas no entanto não deu certo !!!

como deve ser ??

Você teria que declarar o a classe do parametro não como Objeto, mas sim como o tipo de classe que o Objeto representará.

Por exemplo colocar na declaração do tipo do parâmetro:
com.meu.pacote.MinhaClasse

Mas não sei como que fica o lance do classpath. Talvez tenha que colocar essa classe no diretório lib do Jasper quando estiver testando.

Crie uma classe com os get’s necessarios tipo

package br.com.meu.pacote.legal;

public class RelogioAtomicoAnalogico{
 public java.lang.String getCodigo(){
  return "Hello World";
 }
}

agora passe ela como parametro no HashMap [acho que nao preciso explicar né? :D]

beleza agora vamos ao iReport

Crie um Parameter [View -> Report Parameters -> New]
Parameter Name: RelogioAtomicoAnalogico
Class Type: java.lang.Object
[/code][code]
Crie uma Variable [View -> Report Variables -> New ]
Variable Name: RelogioAtomicoAnalogico
Class Type: br.com.meu.pacote.legal.RelogioAtomicoAnalogico
Variable Expression: $P{RelogioAtomicoAnalogico}

agora no report basta criar um field do tipo string com a expressao

$V{RelogioAtomicoDigital}.getCodigo()

se eu nao me perdi, deve funcionar :lol:
valeu cara? até mais… :wink:

valeu gui pela ajuada, mas ainda to com problema. Lá no campo Variable Class Type de principal.jrxml, eu coloquei apenas Material, que o nome da classe que eu desejo passar como parametro. Tanto Material.java como principal.jrxml estaõ no mesmo diretorio, por isso nesse campo, Variable Class Type, coloquei apenas o nome da classe.

No entanto na hora que eu rodo no iReport ele diz que não consegeu encontrar a classe Material. Ao meu ver, ele deveria encontrar uma vez que estão no mesmo diretorio !!

valeu !

Alguem ajuda ai ??

Para o IReport encontrar minhas classes eu tive que colocar o jar com elas dentro da pasta lib do IReport…

Faça isso, feche o IReport e abra novamente e então tente compilar o arquivo…

Detalhe: se for um arquivo apenas precisa ser o .class e não o .java

Fallow

E se eu executar da aplicação e naõ do iReport, daria esse problema tb ?? Acho q não ne’?? No entanto eu tentei da aplicaçao e tb não deu certo !!

valeu cara !!

Siga Passo-a-Passo. :smiley:
e você precisa expecificar o package certinho na Variable beleza ?
de uma relida no que eu passei. faça um passo-a-passo que vai funcionar…

Valeu? até mais… :wink:

E o erro foi o mesmo? Tipo, na aplicação vc pegou o jrxml e compilou e mesmo assim deu o mesmo erro?

Não . Na aplicação não deu erro algum , simplismente não apareceu nada. Fiz tudo como o gui falou, mas infelismente não aparece nada !!

Tanto o .jrxml quanto o .java (classe a ser passada como parametro para .jrxml) estão no mesmo diretorio. Por isso, no campo “Variable Class Type” coloquei apenas o nome da classe.

gui, so aquele passo-a-passo que vc deu eh suficiente mesmo ?? Fiz igualzinho como vc disse !! Vc poderia dá uma explicada na localização da classe que eu quero passar como parametro , ou seja, onde ela deve ficar ? Da forma que eu estou fazendo num era pra dá certo não ??

valeu !!!

aqui no meu tb naum funciona… da q num acha a classe… issu dentro do iReport


Compiling to file... D:\projetosNetBeans\iReport\src\ireport\iReport.jasper -> D:\projetosNetBeans\iReport\src\ireport\iReport.java
Error compiling the report Java source.
net.sf.jasperreports.engine.JRRuntimeException: java.lang.ClassNotFoundException: ireport.RelogioAtomicoAnalogico     at net.sf.jasperreports.engine.base.JRBaseVariable.getValueClass(JRBaseVariable.java:130)     at net.sf.jasperreports.engine.design.JRVerifier.verifyVariables(JRVerifier.java:669)     at net.sf.jasperreports.engine.design.JRVerifier.verifyDataset(JRVerifier.java:2092)     at net.sf.jasperreports.engine.design.JRVerifier.verifyDesign(JRVerifier.java:180)     at net.sf.jasperreports.engine.design.JRVerifier.verifyDesign(JRVerifier.java:158)     at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:257)     at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:144)     at net.sf.jasperreports.engine.design.JRDefaultCompiler.compileReport(JRDefaultCompiler.java:105)     at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:127)     at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:109)     at it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:529)     at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: ireport.RelogioAtomicoAnalogico     at java.net.URLClassLoader$1.run(Unknown Source)     at java.security.AccessController.doPrivileged(Native Method)     at java.net.URLClassLoader.findClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClassInternal(Unknown Source)     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Unknown Source)     at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:90)     at net.sf.jasperreports.engine.base.JRBaseVariable.getValueClass(JRBaseVariable.java:126)     ... 11 more 
Compilation running time: 62

Poisé a classe nao esta no classpath ai nao funciona mesmo.

[quote=keller]Crie uma classe com os get’s necessarios tipo

package br.com.meu.pacote.legal;

public class RelogioAtomicoAnalogico{
 public java.lang.String getCodigo(){
  return "Hello World";
 }
}

agora passe ela como parametro no HashMap [acho que nao preciso explicar né? :D]

beleza agora vamos ao iReport

Crie um Parameter [View -> Report Parameters -> New]
Parameter Name: RelogioAtomicoAnalogico
Class Type: java.lang.Object
[/code][code]
Crie uma Variable [View -> Report Variables -> New ]
Variable Name: RelogioAtomicoAnalogico
Class Type: br.com.meu.pacote.legal.RelogioAtomicoAnalogico
Variable Expression: $P{RelogioAtomicoAnalogico}

agora no report basta criar um field do tipo string com a expressao

$V{RelogioAtomicoDigital}.getCodigo()

se eu nao me perdi, deve funcionar :lol:
valeu cara? até mais… :wink:[/quote]

O Amigo…joia…estava precisando fazer a mesma coisa…e usei seu procedimento no entando quando vai exibir …exibi nulo…so que o objeto está no map…tem alguma ideia?

Pessoal achei o problema…tava na maneira de mandar o parametro… valeu… 8)

revivendo o tópico depois de algum tempo…

como voce corrigiu o problema de receber o valor nulo?