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

12 respostas
C

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?

C

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);
C

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?

C

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:

C

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

C

Galera resolvido!!

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

Obrigado ai leandro.

Abraço

C

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

A

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 =\

C

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