JRException estranha.. E repetição

6 respostas
F

Boa tarde!
Tô tentando gerar um relatório e no momento que mando gerar ele lança JRException.
Além disso, ele tá sendo feito duas vezes (então lança 2 excessões iguais).

JRException:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : conta_id
	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:864)
	at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:828)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1439)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:903)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:832)
	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:605)
	at relatorio.Relatorios.geraRelatorio(Relatorios.java:46)
	at relatorio.Relatorios.<init>(Relatorios.java:26)
	at controle.ControlePrincipal.actionPerformed(ControlePrincipal.java:70)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.NoSuchMethodException: Unknown property 'conta_id' on class 'class modelo.MovimentoFinanceiro'
	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1322)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:846)
	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
	... 52 more

Classe que gera o relatório:

// ...

public class Relatorios {

    public Relatorios(String tipo) {
        geraRelatorio(tipo);
    }

    // Gera relatório
    private void geraRelatorio(String tipo) {
        DAOMovimentoFinanceiro dao = new DAOMovimentoFinanceiro();
        java.util.Date data = new java.util.Date();
        List lista;
        JRBeanCollectionDataSource jr;
        Map parameters;
        InputStream is;
        JasperPrint print;

        if (tipo.equals("Fluxo de Caixa")) {

            try {
                lista = dao.consultaPorData(data);
                jr = new JRBeanCollectionDataSource(lista, false);
                parameters = new HashMap();
                is = this.getClass().getResourceAsStream("fluxoCaixa.jasper");
                print = JasperFillManager.fillReport(is, parameters, jr);
                JasperViewer.viewReport(print, false);
            } catch (JRException ex) {
                ex.printStackTrace();
            }

// ...

Método consultarPorData no DAO

public List consultaPorData(Date data){
        return getSessao().createCriteria(MovimentoFinanceiro.class)
                .add(Restrictions.gt("data", data))
                .addOrder(Order.asc("data")).list();
    }

Classe MovimentoFinanceiro:

@Entity
public class MovimentoFinanceiro implements Serializable {
    
    private int id;
    private String numDocumento, historico;
    private Date data;
    private BigDecimal valor;
    private Conta conta;
    private Codigo codigo;
    private Obra obra;
    private boolean realizado = false;
    private String tipo;
    private Favorecido favorecido;
    
    
    
    /* Getters and Setters */
    
    // ....

    @ManyToOne(fetch = FetchType.LAZY)
    public Conta getConta() {
        return conta;
    }

    public void setConta(Conta conta) {
        this.conta = conta;
    }

    // ...

}

Classe Conta:

@Entity
public class Conta implements Serializable {
    
    
    private int conta_id;
    private String nome;
    private String banco;
    private BigDecimal qtdCaixa;

    @Id
    @GeneratedValue
    @Column(name = "id")
    public int getId() {
        return conta_id;
    }

    //...

6 Respostas

W

Sem querer ser chato, mas se vc criou um topico e resolveu o seu problema, mesmo que vc tenha resolvido sem ajuda de ninguem, seria otimo se vc colocasse a solucao do seu problema ou invez de editar e o topico, e mudar o tituto para [Apagar].

A resolucao do seu problema pode ajudar alguem.

//Daniel

F

Eu sempre faço isso, pode ver pelas minhas mensagens.
Mas dessa vez eu postei por falta de atenção, apenas.
Mas agora vou editar novamente pra botar um erro que tive.

F

windsofhell ou algum outro saberia me ajudar?

robson_costa

na linha 55 ta dizendo o erro, nao existe o atributo conta_id na classe modelo.MovimentoFinanceiro.
corrige essa parte no seu relatorio.

F

Isso era um erro na forma como eu pegava os dados no iReport. Eu só estava usando a query, ao invés de usar javabeans.

Mas agora um outro erro permanece. O relatório Fluxo de Caixa tá sendo gerado 2x, sendo que ele tem a mesma forma de construção do outro relatório (e esse outro está funcionando certinho).

Classe Gerador

public Gerador(String tipo){
        Map mapaRelatorios = new HashMap();
        mapaRelatorios.put("Contas a Pagar", new ContasPagar());
        mapaRelatorios.put("Fluxo de Caixa", new FluxoCaixa());
        Relatorios relatorios = (Relatorios) mapaRelatorios.get(tipo);
        relatorios.geraRelatorio(); 
    }

Classe FluxoCaixa (que tá gerando repetido):

public class FluxoCaixa implements Relatorios {

    @Override
    public void geraRelatorio() {
        DAOMovimentoFinanceiro dao = new DAOMovimentoFinanceiro();
        java.util.Date data = new java.util.Date();
        List lista;
        JRBeanCollectionDataSource jr;
        Map parameters;
        InputStream is;
        JasperPrint print;

            try {
                lista = dao.consultaPorData(data);
                jr = new JRBeanCollectionDataSource(lista);
                parameters = new HashMap();
                is = this.getClass().getResourceAsStream("fluxoCaixa.jasper");
                print = JasperFillManager.fillReport(is, parameters, jr);
                JasperViewer.viewReport(print, false);
            } catch (JRException ex) {
                ex.printStackTrace();
            }
    }
    
}
robson_costa

o relatorio “Contas a Pagar” é gerado correto isso ?
a classe contas a pagar tem codigo parecido com a fluxo de caixa, o que muda é somente o arquivo jasper correto ?
se for isso entao pode ser que tem algum detalhe no seu fluxocaixa.jasper que esteja fazendo gerar duplicado, dai so analisando o jasper para saber.

Criado 12 de setembro de 2011
Ultima resposta 16 de set. de 2011
Respostas 6
Participantes 3