[RESOLVIDO]JSF + IReport ERRo:Error retrieving field value from bean :

12 respostas
Cherubini

Olá,

estou tentando executar um relatoria na minha aplicação mais só gera o seguinte erro:

Error retrieving field value from bean :

Classe de relatorio

public class Relatorios {

	// Campos de parametro do report
	private Integer p_codpedido;
	private String p_ordenador;
	private String p_gestor;
	private String p_agente;
	

	public void imprimirRelatorioPam(ActionEvent event,IDAO dao) throws Exception {
		
		List<Pedido> list = dao.listarTudo(Pedido.class);	
		
		// parametros
		Map parametros = new HashMap();		
		parametros.put("P_CODPEDIDO", new Integer(10));
		parametros.put("P_ORDENADOR", new String("Eurico Jorge de Lima Cel Int"));
		parametros.put("P_GESTOR", new String("Fernando Cardoso Vidal Júnior - Maj Int"));
		parametros.put("P_AGENTE", new String("Jorge Luiz R.Alvarenga T.Cel Int"));	

		try {
			
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
			
			JasperPrint impressao = JasperFillManager.fillReport(getPath() + "/pam.jasper",parametros,ds);

			if (impressao != null) {
				byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
				byte[] arquivo = bytes;

				download(arquivo,"pamTeste");
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

	}
	
	//Devolve o path padrao dos reports
	public static String getPath() {   
		ServletContext servletContext = (ServletContext) getFacesContext()
		.getExternalContext().getContext();
	    return servletContext.getRealPath("WEB-INF/report/") + "/";   
	}
	
	//Devolve o response para o download
	public static HttpServletResponse getServletResponse() {   
	    return (HttpServletResponse)getFacesContext().getExternalContext().getResponse();   
	}   
	  
	//obtem o faces context da aplicacao
	public static FacesContext getFacesContext() {   
	    return FacesContext.getCurrentInstance();   
	} 
	
	//metodo que executa o download
	public static void download(byte[] arquivo, String nome) throws Exception {   
	    HttpServletResponse response = getServletResponse();   
	    response.setContentType("application/pdf");   
	    response.setContentLength(arquivo.length);   
	    response.addHeader("Content-Disposition", "attachment; filename=" + "\"" + nome + "\"");   
	    ServletOutputStream outputStream = response.getOutputStream();   
	    outputStream.write(arquivo, 0, arquivo.length);   
	    outputStream.flush();   
	    outputStream.close();   
	    getFacesContext().responseComplete();           
	} 

}

Managed Bean

public class RelatorioPamMB {

	private Relatorios pam = new Relatorios();

	// Dependencia injetada
	private IDAO dao;

	public Relatorios getPam() {
		return pam;
	}

	public IDAO getDao() {
		return dao;
	}

	public void setDao(IDAO dao) {
		this.dao = dao;
	}

	public void imprimir(ActionEvent event) {
		try {
			this.pam.imprimirRelatorioPam(event, getDao());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

Os nomes dos atributos da bean estar igual ao do ireport

ficarei no aguardo

Abrass

12 Respostas

L

Tem como mandar a exceção um pouco mais completa?

Cherubini

Cara é serio a exceção é essa! nao da um stacktrace, ele so fala isso Error retrieving field value from bean :
e nao executa o PDF. :frowning:

L

Tenta o seguinte

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list,false);
Cherubini

Blz! Executou agora.

but…

executou em branco, o arquivo .PDF esta em branco não apareceu nem os campos staticos! :frowning:

L

Qual versão ireport vc esta usando? em portugues ou ingles?

Cherubini

Cara eu to testando em duas a 3.0.0 em portugues e a 3.5.2 em portugues tambem
as duas esta ocorrendo o mesmo caso.

L

No 3.0 selecione o relatorio e vá em Editar -> Propriedades do relatorio, na tela de propriedade clique na aba "Mais…" e no combo "Quando sem informações" selecione a opção "Todas as seções, nenhum detalhe".

Isto vai fazer com que seu relatorio mostre as outras bandas quando não tiver informações;

Pelo menos agora não vai ficar em branco…heheh :smiley:

Cherubini

Fala leandrolw,

cara consegui + ou -, tipo o problema é na minha query do Ireport para gerar os campos do desing!Nessa query

eu coloco varios inner join, e a lista so vem os dados da tabela pedido, ai ele gera erro!Se vc souber

algum mecanismo que ao enviar minha List ele entenda os dados do inner ficarei grato.

Abraços

Cherubini

Galera resolvido!!

Eu tirei o envio de lista, e so usei a query do banco passando parametro pelo Map.

Obrigado ai leandro.

Abraço

carolino

Estou passando pelo mesmo problema… será que você poderia postar o código pra eu ver

andrestrindade

Pelo que entendi a solução dele foi usar a query dentro do relatório. No meu caso, não adianta fazer isso. Até poderia fazer, mas seria “errado”. Gostaria de resolver este problema… Não usar outras solução =\

carolino

Então…
consegui resolver o problema do relatório e gerar o pdf

postei a solução que encontrei nesse post:

Espero que ajude

Abraços!

Criado 14 de julho de 2009
Ultima resposta 20 de mai. de 2011
Respostas 12
Participantes 4