Problema com JasperReport e lista

17 respostas
E

Bom dia galera, estou tentando gerar um relatório e estou obtendo erro vou postar o DAO de onde obtenho a lista e o MB onde tem o método que gera o relatório, se alguem puder me ajudar agradeço.

metodo DAO que retorna a lista

@SuppressWarnings("unchecked")
	public List<Usuario> listaTodos(){
		EntityManager em = FabricaEM.obterEM();
		
		StringBuffer hql = new StringBuffer();
		hql.append("SELECT d.nome FROM Usuario d ");
		
		Query query = em.createQuery(hql.toString());
		
		return (List<Usuario>) query.getResultList();
	}

Método do MB que gera o relatório

public void relatorio() {
		try {
			FacesContext context = FacesContext.getCurrentInstance();
			ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();
			String caminhoRelatorio = servletContext.getRealPath("/WEB-INF/relatorio/rel3.jasper");
			HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
			response.setContentType("application/pdf");
			response.addHeader("Content-disposition", "attachment; filename=\"arquivo.pdf\"");
						
			UsuarioDAO usuarioDAO = new UsuarioDAO();
			List<Usuario> listaUs = usuarioDAO.listaTodos();
			
			JasperPrint impressao = JasperFillManager.fillReport(caminhoRelatorio, null, new JRBeanCollectionDataSource(listaUs));  
	        JasperExportManager.exportReportToPdfStream(impressao, response.getOutputStream());  
	        context.getApplication().getStateManager().saveView(context);  
	        context.responseComplete();  		

		} catch (Exception e) {
			System.out.println("Erro: " + e.getMessage());
		}

	}

Aqui o erro…

Ago 28, 2013 12:08:39 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
Advertência: #{cc.attrs.refClasse.cancelar}: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
javax.faces.FacesException: #{cc.attrs.refClasse.cancelar}: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.aquareef.view.listener.EncodingFilter.doFilter(EncodingFilter.java:20)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.aquareef.opensessioninview.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:27)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 29 more
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
	at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
	at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1331)
	at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1232)
	at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1208)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1577)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
	at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:569)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)
	at br.com.aquareef.view.bean.usuario.ManterUsuarioMB.cancelar(ManterUsuarioMB.java:105)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at com.sun.faces.facelets.el.ContextualCompositeMethodExpression.invoke(ContextualCompositeMethodExpression.java:177)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 30 more
Caused by: java.lang.NoSuchMethodException: Unknown property 'codregistro' on class 'class java.lang.String'
	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
	... 53 more

++++++++++afterPhase9041a2f929d8ee8e2da555fa918bdea5
Ago 28, 2013 12:08:39 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [Faces Servlet] in context with path [/AquaReef] threw exception
java.lang.RuntimeException: javax.servlet.ServletException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at br.com.aquareef.opensessioninview.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:34)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.servlet.ServletException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.aquareef.view.listener.EncodingFilter.doFilter(EncodingFilter.java:20)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.aquareef.opensessioninview.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:27)
	... 16 more
Caused by: javax.faces.el.EvaluationException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	... 22 more
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : codregistro
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
	at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
	at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1331)
	at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1232)
	at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1208)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1577)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
	at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:569)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)
	at br.com.aquareef.view.bean.usuario.ManterUsuarioMB.cancelar(ManterUsuarioMB.java:105)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at com.sun.faces.facelets.el.ContextualCompositeMethodExpression.invoke(ContextualCompositeMethodExpression.java:177)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 30 more
Caused by: java.lang.NoSuchMethodException: Unknown property 'codregistro' on class 'class java.lang.String'
	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
	... 53 more

17 Respostas

Rodrigo_Sasaki

Caused by: java.lang.NoSuchMethodException: Unknown property ‘codregistro’ on class ‘class java.lang.String’
Provavelmente tem alguma coisa errada no seu .jrxml :slight_smile:

E

pô refiz ele somente com um campo “nome” conforme o DAO e nada… no iReport utilizo o JavaBean Datasource referenciando minha entidade para buscar os campos e simplesmente coloquei o campo “nome”.

Rodrigo_Sasaki

Você tem que encontrar onde está esse codregistro, aí sim vai identificar o problema. Experimente dar um Find (Ctrl + F) mesmo no arquivo .jrxml

E

Ainda não esta resolvido porem dentro do xml do relatório tinha realmente filds errados inclusive esse codregistro, arrumei os campos agora ele gera o PDF porem com erro (não abre dizendo que o arquivo pode estar corrompido, na verdade depois vou modificar o response para abrir de fato o PDF no browser), lança agora essa Exception: Error retrieving field value from bean : nome

Rodrigo_Sasaki

Tem como postar sua entidade? Eu acho que está tendo algum problema entre o nome do atributo na entidade, e a referência a ele no relatório.

E
Rodrigo Sasaki:
Tem como postar sua entidade? Eu acho que está tendo algum problema entre o nome do atributo na entidade, e a referência a ele no relatório.
Também fui ver isso porem da uma olhada... só se for no retorno da List... ou no HQL ...
@Entity
@Table(name="userreef")
public class Usuario implements Serializable{

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long codregistro;

	@Column
	private Date dataRegistro;
		
	@Column(length=20)
	private String email;
	
	@Column(length=100)
	private String nome;		
	
	@Column(length=100)
	private String lograd;
	
	@Column(length=10)
	private String numero;
	
	@Column(length=30)
	private String senha;

	@Column(length=20)
	private String comple;

	@Column(length=50)
	private String bairro;

	@Column(length=50)
	private String cidade;

	@Column(length=2)
	private String estado;


         and getters and setters.....
Rodrigo_Sasaki

Como o field está definido no relatório?

E

Assim
$F{nome}

E

Rodrigo Sasaki:
Como o field está definido no relatório?
em XML esta assim

<field name="nome" class="java.lang.String"> <fieldDescription><![CDATA[nome]]></fieldDescription> </field>

Esta correto isso?

Rodrigo_Sasaki

Assim
$F{nome}

Não não, isso é você utilizando ele, a definição é feita no xml, geralmente no começo. E verifique também sua queryString, ela deveria estar vazia

E

Assim
$F{nome}

Não não, isso é você utilizando ele, a definição é feita no xml, geralmente no começo. E verifique também sua queryString, ela deveria estar vazia

Certo, vou postar o xml todo… a QS esta vazia…

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="rel3" language="java" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="dba5e64e-b106-447b-85f0-fc96ddf0fd8e">
	<queryString>
		<![CDATA[]]>
	</queryString>
	<field name="nome" class="java.lang.String">
		<fieldDescription><![CDATA[nome]]></fieldDescription>
	</field>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="79" splitType="Stretch"/>
	</title>
	<pageHeader>
		<band height="35" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="61" splitType="Stretch">
			<staticText>
				<reportElement uuid="c68117ee-8f58-48c4-9ed8-13127babe235" x="51" y="2" width="100" height="20"/>
				<textElement/>
				<text><![CDATA[nome]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="125" splitType="Stretch">
			<textField>
				<reportElement uuid="b0c78b79-9600-401c-8a3e-689003ce5e04" x="51" y="30" width="100" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
	<columnFooter>
		<band height="45" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="54" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="42" splitType="Stretch"/>
	</summary>
</jasperReport>
Rodrigo_Sasaki

Eu acho que em algum lugar aí devia ter uma referência ao seu datasource, mas estou sem nenhum exemplo aqui pra confirmar.

Eu sugiro que você crie um relatório novo :slight_smile: Já definindo o datasource correto e tudo mais

E

Rodrigo Sasaki:
Eu acho que em algum lugar aí devia ter uma referência ao seu datasource, mas estou sem nenhum exemplo aqui pra confirmar.

Eu sugiro que você crie um relatório novo :slight_smile: Já definindo o datasource correto e tudo mais

Vou tentar fazer isso e lhe falo.

E

Rodrigo Sasaki:
Eu acho que em algum lugar aí devia ter uma referência ao seu datasource, mas estou sem nenhum exemplo aqui pra confirmar.

Eu sugiro que você crie um relatório novo :slight_smile: Já definindo o datasource correto e tudo mais


refiz e nada… mesmo erro… Error retrieving field value from bean : nome

E

Alguém para dar uma luz? rs… não vai por nada…

E

Com JRBeanCollectionDataSource não precisa definir datasource.
Veja:
#Se o relatorio é esse mesmo rel3.jasper
#Veja o caminho da compilaçao desse relatório no ireport esta nesse local mesmo ou se vc esta usando um antigo(acredite ja fiz isso e fiquei mexendo no ireport e rodando o arquivo errado)
#De um refresh no projeto para atualizar o arquivo

Para confirmar tire todos os fields $F{nome} e blabla do relatório e rode só texto estatico com um nome que vc colocou agora ex: campo estático xxxxxxxxxxxx e veja se ele gera, só para ter certeza que esse é realmente seu relatório

E

Ok Edu obrigado pela ajuda, vou tentar fazer isso amanha e posto o resultado, tivemos que avançar acabou o tempo da sprint então ficou essa tarefa para uma outra sprint, fazer oque…

Criado 28 de agosto de 2013
Ultima resposta 29 de ago. de 2013
Respostas 17
Participantes 3