JSF + JasperReport/iReport - Dessa vez não acontece erro, então o que está errado?

0 respostas
anderson.bonavides

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();
	}
}
Criado 24 de abril de 2009
Respostas 0
Participantes 1