1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problemas com JasperFillManager

Preciso aprender a gerar relatórios com o Ireport, mas estou tendo muita dificuldade a "fábrica de relatórios" no NetBeans. Por favor, me ajudem a achar o erro.

Criei uma classe de testes chamada Usuario e uso o MySQL como banco. Montei o relatório no Ireport, a conexão com o banco, tudo certinho. Eis o problema: ao executar a classe GerarRelatoriosTeste (que é minha fábrica de relatórios)

package GerarRelatorio;

import DAO.usuario.UsuarioDAO;
import java.util.List;
import modelo.usuario.Usuario;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class GerarRelatorioTeste {

    public static void main(String[] args) throws JRException {

        UsuarioDAO user = new UsuarioDAO();
        List<Usuario> lista = user.usuarios();
        JRDataSource jrds = new JRBeanCollectionDataSource(lista);

        System.out.println("Gerando relarório");

        JasperReport r = JasperCompileManager.compileReport("G:/NetBeansProjects/AplicacaoJava/src/GerarRelatorio/relusuario.jrxml");
        System.out.println("Gerando relarório");

        JasperPrint printReport = JasperFillManager.fillReport(r, null, jrds);
        System.out.println("Gerando relarório");

        JasperExportManager.exportReportToPdfFile(printReport, "G:/NetBeansProjects/AplicacaoJava/src/GerarRelatorio/relusuario.pdf");
        System.out.println("Relatório com sucesso.");

    }
}

Acontece essa exceção na parte JasperFillManager.fillReport... DETALHE: Esse erro acontece se insiro informações do banco, porém se o banco está vazio, ele gera o relatório em branco.

Exception in thread "main" net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : 
    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:1358)
    at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1259)
    at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1235)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1588)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:939)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:871)
    at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
    at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
    at GerarRelatorio.GerarRelatorioTeste.main(GerarRelatorioTeste.java:58)
Caused by: java.lang.NoSuchMethodException: Unknown property ''
    at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
    at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
    at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
    ... 13 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)

Aqui está o método que usei para buscar as informações do banco.

public List<Usuario> usuarios(){

        try{

            List<Usuario> usuarios = new ArrayList<Usuario>();
            PreparedStatement stmt = conexao.prepareStatement("select * from usuario");
            ResultSet rs = stmt.executeQuery();

            while(rs.next()){
                Usuario usuario = new Usuario();
                usuario.setId(rs.getInt("id"));
                usuario.setTipo(rs.getString("tipo"));
                usuario.setRa(rs.getString("ra"));
                usuario.setEmail(rs.getString("email"));
                usuario.setCelular(rs.getString("celular"));
                usuario.setSenha(rs.getString("senha"));

                usuarios.add(usuario);

            }

            rs.close();
            stmt.close();
            return usuarios;


        }

        catch (SQLException error){
            throw  new RuntimeException(error);
        }

Tentei várias coisas, mas não consigo entender o está acontecendo. O que estou fazendo de errado? Me ajudem.

  • Ao que parece o problema está no seu relatório, ele está tentando pegar uma propriedade do bean, mas ela não foi especificada no relatório "Unknown property ''" veja as colunas do relatório se estão configuradas corretamente. Se não descobrir, coloque aqui o jrxml também.

    Rafael Rossignol   25 de jun de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ireport java netbeans mysql ou faça a sua própria pergunta.