Problema com Ireport

9 respostas
leohunther

Fala gente boa!
Estou com um problema nesse código. Quando eu crio o relatório e não tem dado nenhum no banco ele
diz que o relatório não contém páginas e aparece normalmente em branco. Mas quando o banco tem algum dado( nesse caso o vetor), ele dá essa exceção:

[code]okException in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/beanutils/PropertyUtils
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:104)
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:799)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:763)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1078)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:107)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:751)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:679)
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.fillReport(JasperFillManager.java:517)
at menuPrincipal.ControleJPrincipal.actionPerformed(ControleJPrincipal.java:36)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

meu classpath: além do jre1.6
postgresql-8.1-404.jdbc3.jar
jasperreports-1.3.1.jar
commons-logging-1.0.2.jar
commons-collections-2.1.jar
ireport.jar

o arquivo relatorioAlunos.jasper esta na package menuPrincipal.

Meu código:
package menuPrincipal;

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import java.util.Vector;
import aluno.*;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.JasperPrint;
public class ControleJPrincipal extends AbstractAction {

private static final long serialVersionUID = 1L;

public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command.equals("mAluno")){
new Faluno();
}//fim do if mAluno

else if(command.equals("mRAluno")){
try{
System.out.print("ok");
ControleAluno controleAluno = new ControleAluno();
Vector vetorAluno = controleAluno.dadosEmVetor();

//classe que define o tipo de dado do relatório
JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(vetorAluno);
Map map = new HashMap();
//comando para criar relatórios
JasperPrint impressao = JasperFillManager.fillReport("relatorioAlunos.jasper", map, jrbean);
//comando para mostrar o relatório
JasperViewer.viewReport(impressao, false);

}//fim do try
catch (JRException ex){
JOptionPane.showMessageDialog(null,"Erro ao tentar abrir o relatório\n"+ex.getStackTrace(),"Erro",JOptionPane.ERROR_MESSAGE);
}//fim do catch
}//fim do if mRaluno

}//fim do actionPerformed

}//fim da classe

Estou usando o postgresql e fazendo no eclipse.
No Ireport o relatório aparece normalmente sem os dados, não sei se era para aparecer no IReport já com os dados? Mas lá aparece em branco quando compila mesmo com dados no banco. Pelo menos aparece, no eclipse dá essa exceção.
Qualquer ajuda, fico grato!
Valeu gente!

9 Respostas

normandesjr

Amigo,

A princípio esta faltando o jar: commons-beanutils-xxx.jar.

Tenta pegar ele no lib do iReport e colocar no classpath.

Abraços.

leohunther

Muito Grato meu irmão!!!
Po, quebro mo galhão : ) !!
Era isso mesmo!!
Valeu mesmo!!
D+++

leohunther

Sabe onde posso encontrar a documentação ( classe e interfaces) do IReport?

normandesjr

Que bom que deu certo!!! :slight_smile:

Sobre este tipo de documentação que você falou (Classes e Interfaces) eu uso é API em:

http://jasperreports.sourceforge.net/api/index.html

Esta API é do JasperReport. Você irá utilizá-la muito quando estiver gerando seus relatórios a partir de classes Java.

Abraços!

leohunther

Grato meu irmão :smiley:

leohunther

Prezados, Descobri agora que meu programa não está salvando arquivo, PDF por exemplo.
Alguém tem uma sugestão sobre o que pode ser. O código continua o mesmo.
Agradeço qualquer sugestão.

furutani

Olá

Não vi no código postado no primeiro post onde grava o arquivo. Você apenas manda exibir no JasperViewer

leohunther

Resolvido galera!
Obrigado pela disposição de todos (todos dois : ) )rsrsr

furutani: Não saquei o que você disse. Se estiver falando do arquivo .jrprint, no meu caso eu não preciso colocar ele não.

Erro foi corrigido colocando a path: itext-1.3.1.jar no classpath.

Nossa a grande maioria dos erros de jasperReport é classpath, valeu gente boa. Att!

E

Boa tarde amigo, estou com um problema ao compilar este código java:
package com.escola;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperManager;

import net.sf.jasperreports.engine.JasperPrint;

public class RelAlunos extends HttpServlet {
public static Connection con;

public static String banco = xxxx; // Nome do banco de dados

public static String usuario = root; // Usuario do banco

public static String senha = xxxx; // Senha

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

conexao(); // Faz a conexão

// Na variavel pathJasper ficara o caminho do diretório para

// os relatórios compilados (.jasper)

String pathJasper = getServletContext().getRealPath(

/WEB-INF/classes/com/escola)
  • “/”;
    // A variavel path armazena o caminho real para o contexto
    // isso é util pois o seu web container pode estar instalado em lugares diferentes
    String path = getServletContext().getRealPath("/");
// Parametros do relatorio

Map parametros = new HashMap();

// O único parametro que devemos passar é o PathRelAutores

// é o caminho pro RelAutores.jasper (que foi subtituido pelo

// valor fixo ?D:/iReport-0.4.0/RelAutores.jasper?)

parametros.put(PathAlunos, pathJasper + Alunos.jasper);

try {

// Aqui ele cria o relatório

JasperPrint impressao = JasperFillManager.fillReport(pathJasper
  • “Aluno.jasper”, parametros, con);
    // Grava o relatório em disco em pdf
    JasperManager.printReportToPdfFile(impressao, path
  • “/Aluno.pdf”);
    // Redireciona para o pdf gerado
    res.sendRedirect(“Aluno.pdf”);
    } catch (Exception e) {
    res.getWriter().println("Erro ao gerar o relatório: " + e);
    }

}

// Cria a conexão

public void conexao() {

try {

if (con == null || con.isClosed()) {

Class.forName(com.mysql.jdbc.Driver);

con = DriverManager.getConnection(

jdbc:mysql://127.0.0.1:8080/” + banco, usuario, senha);

}

} catch (Exception e) {

System.out.println(não foi possível conectar ao banco ->);

e.printStackTrace();

}

}

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)

throws ServletException, IOException {

doPost(arg0, arg1);

}

}

ele  o seguinte erro:

package net.sf.jasperreports.engine does not exist

package net.sf.jasperreports.engine does not exist

package net.sf.jasperreports.engine does not exist

cannot find symbol class JasperPrint

cannot find symbol variable JasperFillManager

cannot find symbol variable JasperManager

o que eu faço?

um forte abraço!!!
Criado 26 de outubro de 2007
Ultima resposta 11 de mar. de 2008
Respostas 9
Participantes 4