Saudações colegas desenvolvedores, estou tentando gerar relatórios usando a ferramenta Ireport e incorporando-os a uma pasta dentro do meu projeto no netbeans, porém na hora de executar o método:
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
retorna um erro de NullPointerException.Abaixo disponho a classe que estou usando para chamar o relatório.Já pesquisei alguns blogs e baseado neles cheguei a essas classes.
RelatorioBean.java
@Named
@SessionScoped
public class RelatorioBean extends DatabaseUtil{
private String saida;
public String geraRelatorioPassandoConexao() {
saida = null;
String jasper = getDiretorioReal("/relatorios/teste.jasper");
System.out.print("Valor variável Jasper" + jasper);
Connection conexao = null;
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
// Abro a conex?o com o banco que ser· passada para o JasperReports
conexao = getConnection();
// Mando o jasper gerar o relatÛrio
HashMap parametros = new HashMap();
//
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
System.out.println(print.toString());
// Gero o PDF
//preenchePdf(print);
JasperViewer jrv = new JasperViewer(print);
jrv.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// Sempre mando fechar a conex?o, mesmo que tenha dado erro
if (conexao != null)
conexao.close();
} catch (SQLException e) {
}
}
return "exibeRelatorio";
}
public String getSaida() {
return saida;
}
public void setSaida(String saida) {
this.saida = saida;
}
private String getDiretorioReal(String diretorio) {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getRealPath(diretorio);
}
}
Se alguém puder me auxliar fico bem grato, pois estou já há alguns dias apanhando desse relatório.
att.
Alexandre
No erro do NullPointerException ele aponta para a linha exata do erro.
Qual é a linha? e qual o código nela?
Aponta sim amigo, é essa linha aqui:
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
eu estou passando relatório sem resultset, já montado usando a ferramenta ireport, será essa a causa do erro?
grato pela sua atenção!
Alexandre
[quote=alexandresobral2004]Aponta sim amigo, é essa linha aqui:
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
eu estou passando relatório sem resultset, já montado usando a ferramenta ireport, será essa a causa do erro?
grato pela sua atenção!
Alexandre[/quote]Todos os parâmetros estão preenchidos corretamente? Existe algum null?
Existe sim, a variável parâmetros foi criada, mas n tem nada atribuido, porque o relatório foi criado sem parâmetros adicionais.
att.
Alexandre
[quote=alexandresobral2004]Existe sim, a variável parâmetros foi criada, mas n tem nada atribuido, porque o relatório foi criado sem parâmetros adicionais.
att.
Alexandre[/quote]Não entendi. Eu perguntei duas coisas.
O existe sim é para caso todas estão preenchidas ou tem variável null?
Todos os parâmetros estão preenchidos corretamente?
R: Estão sim todos preenchidos, porém a variavel parametros que está nessa linha abaixo que é a causadora do erro
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
É um Hashmap e não está mapeando nada. É apenas um objeto instanciado.
Existe algum null?
não
E ai blz!!
Veja bem, no trecho de seu codigo abaixo vc instanciou um objeto parametros, porém vc não esta repassando nenhum parameto, logo o “parametro” esta nulo!!!
HashMap parametros = new HashMap();
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
System.out.println(print.toString());
vc deveria ter algo tipo:
HashMap parametros = new HashMap();
parametros.put("nome", this..usuario.getNome());//nome será o parametro que vc definiu no relatorio
JasperPrint print = JasperFillManager.fillReport(jasper, parametros, conexao);
System.out.println(print.toString());
Nada disso.
Veja que ele faz HashMap parametros = new HashMap();
Logo, o objeto parametros não é nulo, ele apenas não possui nenhum atributo com valor.
O que eu estou imaginando é que o null pointer seja dado pelo atributo conexão, pois, se ele fizesse a chamada desta forma:
JasperPrint print = JasperFillManager.fillReport(jasper, null, conexao);
Funcionaria…(eu acho)
[quote=drsmachado]Nada disso.
Veja que ele faz HashMap parametros = new HashMap();
Logo, o objeto parametros não é nulo, ele apenas não possui nenhum atributo com valor.
O que eu estou imaginando é que o null pointer seja dado pelo atributo conexão, pois, se ele fizesse a chamada desta forma:
JasperPrint print = JasperFillManager.fillReport(jasper, null, conexao);
Funcionaria…(eu acho)[/quote]Eu concordo. Até o (eu acho eu concordo).
Não vi pq um new HashMap() iria causar nullpointer. Se o relatório não aceita parâmetros, ele seria obrigado a passar? O.o