Pessoal to com o seguinte problema, tenho uma aplicação JasperReport/iReport para gerar meus relatorios. O problema é o seguinte, não ocorre erro e relatório nenhum aparece. Em outra tela ele aparece a página do sistema oq deveria ser o relatório.
Segue meu código.
A chamada ao método Managed Bean no xhtml<h:commandLink target="_blank" value="Versão em Pdf" action="#{usuarioBean.relatorioGeral}"/>
No meu MB eu chamo esse método:
public String relatorioGeral(){
try {
RelatorioUsuario relatorioUsuario = new RelatorioUsuario();
relatorioUsuario.geraRelatorio();
resultado = "Sucesso";
} catch (Exception e) {
resultado = "Insucesso";
e.printStackTrace();
}
return resultado;
}
Depois a classe encarregada de gerar o relatório:
public class RelatorioUsuario {
private String saida;
public String getSaida() {
return saida;
}
public void setSaida(String saida) {
this.saida = saida;
}
public String geraRelatorio() {
saida = null;
String jasper = getDiretorioReal("./relatorios/usuario/relatorioDeUsuarios.jasper");
Connection conexao = null;
try {
conexao = new Conexao().getConexao();
JRResultSetDataSource jrsds = new JRResultSetDataSource(getResultSet(conexao));
JasperPrint print = JasperFillManager.fillReport(jasper, null,jrsds);
preenchePdf(print);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conexao != null)
conexao.close();
} catch (SQLException e) {
}
}
return "exibeRelatorio";
}
private ResultSet getResultSet(Connection conexao) throws SQLException,
ClassNotFoundException {
Statement stmt = conexao.createStatement();
ResultSet rs = stmt.executeQuery("SELECT usuario.id_usuario AS usuario_id_usuario,"
+ " usuario.nome AS usuario_nome, usuario.telefone AS usuario_telefone,"
+ " endereco.bairro AS endereco_bairro, endereco.rua AS endereco_rua, "
+ "login.nomeLogin AS login_nomeLogin FROM endereco endereco "
+ "INNER JOIN usuario usuario ON endereco.id_endereco = usuario.id_endereco "
+ "INNER JOIN login login ON usuario.id_login = login.id_login");
return rs;
}
private void preenchePdf(JasperPrint print) throws JRException {
saida = getDiretorioReal("./pdf/relatorio.pdf");
JasperExportManager.exportReportToPdfFile(print, saida);
saida = getContextPath() + "./pdf/relatorio.pdf";
}
/**
* Método para retornar o caminho completo do diretório onde se encontra o
* arquivo 'jasper' e o arquivo 'pdf'
*
* @param diretorio
* String diretório a ser localizado na aplicação
* @return String caminho completo
*/
private String getDiretorioReal(String diretorio) {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getRealPath(diretorio);
}
/**
* Método para retornar o nome da aplicação
*
* @return String nome da aplicacao
*/
private String getContextPath() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getContextPath();
}
}