Jasper Reports - Ajuda com JRBeanCollectionDataSource / JRBeanArrayDataSource

8 respostas
P

Gurizada, seguinte, estou com problemas para gerar um relatório passando as informações através de um data source no jasper. Criei minha classe com o atributo nome, e em meu relatório criei um campo nome qual receberá os dados contidos no data source. Com o JRMapArrayDataSource funciona e com JRBeanCollectionDataSource e o JRBeanArrayDataSource não.
O erro está aí em baixo…

run:

pedro

22/02/2010 14:31:06 tapmebr.spsc.relatorios.Relatorio gerar

SEVERE: null

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : nome

at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:116)

at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:93)

at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:104)

at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:813)

at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:777)

at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1106)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:763)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:688)

at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:492)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:448)

at tapmebr.spsc.relatorios.Relatorio.gerar(Relatorio.java:97)

at tapmebr.Main.main(Main.java:22)

Caused by: java.lang.NoSuchMethodException: Property nome has no getter method

at org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.java:1180)

at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:772)

at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)

at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:104)

 14 more

Reparem no pedro que aparece logo abaixo da palavra run:, este é impresso diretamente do meu objeto que está atribuido este valor. Abaixo tem o código…
List<Consolidado> c = new ArrayList(); c.add(new Consolidado("pedro")); c.add(new Consolidado("paulo")); System.out.println(c.get(0).getNome()); JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(c); try { JasperFillManager.fillReportToFile("c:/relatorios/Relatorio.jasper", new HashMap(), datasource); } catch (JRException ex) { Logger.getLogger(Relatorio.class.getName()).log(Level.SEVERE, null, ex); System.exit(0); }
O que faço de errado?

Grato.

8 Respostas

D

Boa tarde pecosta.

Verifique se voce criou os getters e setter na classe Consolidado para o atributo nome.

P

Sim, foram criados os getters e setters.

A

Coloca a sua entidade aí pra gente ver.
Isso geralmente acontece quando o datasource é configurado de forma errada ou o Jasper não consegue achar o get do atributo.

F

No ireport o campo nome está sendo usado assim $F{nome}?
Lembresse que maiúscula e minúscula faz diferença

P

Sim, está como $F{nome}.

class Consolidado {
    public String nome;

    public Consolidado(String nome){
        setNome(nome);
    }
    
    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

}
D

Verifica no editor de expressões do seu iReport se a expressão $F{nome} está em verde ou azul.
Se está verde, aparentemente está ok.
Caso esteja azul, talvel vc não criou o field corretamente.

P

Sim, está verde.
Consigo gerar o arquivo .jasper mas não consigo gerar o arquivo .jrprint pois a mensagem sempre me retorna que o atributo ‘nome’ não tem getter.

Ninguém passou por essa dificuldade?

Grato.

L

Verifique se o tipo do atributo nome esta como String no Ireport, e recompile o arquivo e a aplicacao,as vezes isso ocorre misteriosamente mesmo.

Criado 22 de fevereiro de 2010
Ultima resposta 1 de mar. de 2010
Respostas 8
Participantes 5