URGENTE - Referenciar os Fields no XML do iReport pra quem usa o Hibernate

4 respostas
G

Galera estou precisando muito de um help.

Estou utilizando o Hibernate com o iReport(jasperreport), mas não consigo referenciar os campos das tabelas no XML(Design) do Relatório no iReport… O que eu coloco nos Fields? $F{ ??? } Como utilizo o Hibernate, já tentei colocar assim: $F{getMatricula} por exemplo mas não funcionou… Por Favor alguém sabe como fazer? Por Favor, coloquem o código do projeto do relatório no ireport(.JRXML) ou mesmo o feito na mão com a biblioteca jasper (.XML).

Obrigado.

Glaudison :smiley:

4 Respostas

brlima

Eu acho que vc deveria criar o Field com o mesmo nome do filed no Hibernate, e não o método get(). Mas de qqer forma vc tem que ter o field criado.

brlima

Vc chegou a ver o link que te passaram no memso topico que vc abriu um pouco antes ?

Vc viu que como ele sabe qual o nome do campo usar… ? Isso criando um JRDataSource pra recuperar o dados da List.
Usando o mesmo nome que vc definiu, vc deve criar os campos no seu relatorio. Ai sim vc pode uisar $F{CAMPO}. ok ?

Dá uma olhada direito no link que te passaram
http://www.guj.com.br/posts/list/19335.java

flw!

ricardolecheta

e o Hibernate não tem nada a ver com o seu problema, o bom e velho Hibernate só vai te retonar uma collection… vc precisa pegar tudo o que vc quer e fazer um fillReport…

por exemplo aquele “JasperManager.fillReport” sabe?

G

implementando a JRDataSource como descrito no link http://www.hibernate.org/79.html

public class HibernateQueryResultDataSource implements JRDataSource { 

  private String[] fields; 
  private Iterator iterator; 
  private Object currentValue; 

  public HibernateQueryResultDataSource(List list, String[] fields) { 
    this.fields = fields; 
    this.iterator = list.iterator(); 
  } 

  public Object getFieldValue(JRField field) throws JRException { 
    Object value = null; 
    int index = getFieldIndex(field.getName()); 
    if (index > -1) { 
      Object[] values = (Object[])currentValue; 
      value = values[index]; 
    } 
    return value; 
  } 

  public boolean next() throws JRException { 
    currentValue = iterator.hasNext() ? iterator.next() : null; 
    return (currentValue != null); 
  } 

  private int getFieldIndex(String field) { 
    int index = -1; 
    for (int i = 0; i < fields.length; i++) { 
      if (fields[i].equals(field)) { 
        index = i; 
        break; 
      } 
    } 
    return index; 
  } 

}

No método getFieldValue dá a seguinte excecao de casting java.lang.ClassCastException no trecho if (index > -1) {
Object[] values = (Object[])currentValue;

Alguem passou por isso? Será q o código está errado?

Glaudison :-o

Criado 18 de janeiro de 2005
Ultima resposta 19 de jan. de 2005
Respostas 4
Participantes 3