Jasper + IReport - JRBeanCollectionDataSource

7 respostas
G

galera, sempre usei SQL nos relatórios mas agora estou precisando fazer diferente, tenho que mandar valores informados que tem quantidade dinamica, logo não posso apenas enviar parametros

estou tentando usar o JRBeanCollectionDataSource

estou apanhando um pouco, gostaria de saber como deve ficar o formato dele quano eu o enviar para o Jasper

ex: [fruta, maçã, carne, bife, carro, gol]
[fruta, pera, carne, bacon, carro, celta]
ou: [fruta, maçã, carne, bife, carro, gol, fruta, pera, carne, bacon, carro, celta]

grato

7 Respostas

D

Você vai ter um tipo fixo de objetos que vai passar para o relatório ou mesmo os objetos podem variar?

Se for um tipo fixo (Cliente por exemplo), você precisa compilar o relatório setando o classpath do iReport para o local onde a classe dos objetos está.
Se for um objeto dinâmico, basta você usar alguma classe que implemente a interface DynaBean do pacote commons-beanutils.

[]´s

D

Claro, a coleção passada para o datasource tem que conter objetos do tipo passado ou do tipo DynaBean.

[]´s

G

os tipos são sempre fixos, mando um numero fixo de colunas, só oque muda são as linhas

é como o resultado de um select, mas tenho que mandar a partir de informações recebidas

até já fiz alguma coisa, coloco ele em uma lista e mando para o jasper mas me aparece este erro:

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

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

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

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

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

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

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

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

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

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

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

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

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

at chamaJasperDANFE.main(chamaJasperDANFE.java:91)

Caused by: java.lang.NoSuchMethodException: Unknown property qtdeReg on class 'class java.lang.String

at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)

at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)

at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)

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

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

 12 more

imagino que o problema está na forma como coloco os valores na lista, é ± assim:

java.util.List ls=new ArrayList(); while (param.hasMoreTokens()) { ls.add(param.nextToken()); } JRBeanCollectionDataSource collectionDataSource = new JRBeanCollectionDataSource(ls);

W

Olha so o erro:

Parece que o relatorio está procurando pela propriedade qtdeReg e não está econtrando.

G

sim sim, esse é o primeiro campo que eu envio no ‘param’

1. java.util.List ls=new ArrayList(); 2. while (param.hasMoreTokens()) { 3. ls.add(param.nextToken()); 4. } 5. JRBeanCollectionDataSource collectionDataSource = new JRBeanCollectionDataSource(ls);

mas qual é a forma que eu coloco os valoress na lista?? alguem pode me manda um println de uma lista que funcione??

G

ninguem mais?

G

ok vou tentar explicar novamente, ex:

tenho a tabela comidas -

frutas | verduras | carnes | doces

maçã | alface | Alcatra | chocolate
pera | espinafre | costela | bolo

como eu adiciono isso na lista??

frutas, maça, verduras, alface, carnes, alcatra, doces, chocolate, frutas, pera, verduras, espinafre, carnes, costela, doces, bolo

ou
maça, alface, alcatra, chocolate, pera, espinafre, costela, bolo (e ele ja carrega de acordo com a ordem)

ou se não for como é?? continua aparecendo para mim o erro:

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

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

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

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

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

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

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

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

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

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

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

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

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

at chamaJasperDANFE.main(chamaJasperDANFE.java:92)

Caused by: java.lang.NoSuchMethodException: Unknown property qtdeReg on class 'class java.lang.String

at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)

at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)

at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)

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

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

 12 more

onde ‘qtdeReg’ é o primeiro campo a ser buscado

Criado 23 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 7
Participantes 3