Property not found on type JSF

Tenho Um Projeto JSF e ele da o seguinte erro:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /cadastro/CadastroProduto.xhtml @64,42 value="#{e.ndi}": Property ‘ndi’ not found on type org.hibernate.collection.PersistentSet
javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

root cause

javax.el.PropertyNotFoundException: /cadastro/CadastroProduto.xhtml @64,42 value="#{e.ndi}": Property ‘ndi’ not found on type org.hibernate.collection.PersistentSet
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:108)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
javax.faces.component.UIOutput.getValue(UIOutput.java:164)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:351)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:160)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:308)
com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:376)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:157)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:300)
com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:376)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:157)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:269)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.22 logs.

eu tenho um h:datatable dentro de outro datatable e quero acessar o label(atributo) deste segundo data table,segue o codigo

<h:dataTable var=“d” value="#{cadastroProduto.lista}" styleClass=“selectTable”>
<h:column>
<h:dataTable var=“e” value="#{d.daoObject.di}" styleClass=“selectTable”>
<h:column>
<f:facet name=“header”>
<h:outputText value=“Data de Registro da DI/DSI/DA”/>
</f:facet>
<h:outputText value="#{e.ndi}"/>
</h:column>
<h:column>
<f:facet name=“header”>
<h:outputText value=“Local de Desembarque”/>
</f:facet>
<h:outputText value=“teste02”/>
</h:column>
<h:column>
<f:facet name=“header”>
 <h:commandButton value=“Adição” action="#{cadastroProduto.btnAvancar}"/>
<h:commandButton value=“Voltar” action="#{cadastroProduto.btnVoltar}" />
</f:facet>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>

Desde ja agradeço galerinha

existe um get/set para ndi da referencia #{e.ndi} ?

existe sim
estou fazendo isto sim

Onde você declara o #{e.ndi}?

esta declarado em Di entenda

eu tenho uma lista de Produto que tem uma lista de Di

segue o codigo da classe Di

package virtualsistemas.nfe.modelo;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Transient;

import virtualsistemas.controle.AbstractPersistenceFactory.QueryStrategy;
import virtualsistemas.nfe.controle.AbstractDAOClassNFE;

@Entity
@SuppressWarnings(“serial”)
public class Di extends AbstractDAOClassNFE{

@Id
@Column(name="id_di")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

@OneToMany(cascade={CascadeType.PERSIST})
@JoinColumn(name="id_di")
private List<Adi> adi;

private String ndi; //10 - Numero do documento de inportacao DI/DSI/DA

private Date ddi; //Data de registro da DI/DSI/DA "AAAA-MM-DD"

private String xLocDesemb; //60 - Local de desembarque
 
@Transient
private UnidadeFederativa objUf;

@Column(name="ufDesemb")
private String uf; //2 - Sigla da Uf onde ocorreu o desembarque

private Date dDesemb; //Data do desembarque "AAAA-MM-DD"

private String cExportador; //60 - Codigo do fabricante estrangeiro

public boolean comtemAdi(Integer codAdi){
	for(Adi d : getAdi() ){
		if(
				(codAdi != null)&&
				(d.getId() == codAdi)
		
		){
			return true;
		}
	}
	return false;
}

public List<Adi> getAdi() {
	if(adi == null){
		adi = new ArrayList<Adi>();
	}
	return adi;
}

public void addadi(Adi adi){
	getAdi().add(adi);
}

public void removeadi(Adi adi){
	getAdi().remove(adi);
}

public void setAdi(List<Adi> adi){
	this.adi = adi;
}

public String getNdi() {
	return ndi;
}

public void setNdi(String ndi) {
	this.ndi = ndi;
}

public Date getDdi() {
	return ddi;
}

public void setDdi(Date ddi) {
	this.ddi = ddi;
}

public String getxLocDesemb() {
	return xLocDesemb;
}

public void setxLocDesemb(String xLocDesemb) {
	this.xLocDesemb = xLocDesemb;
}

public Date getdDesemb() {
	return dDesemb;
}

public UnidadeFederativa getUf() {
	Map<String, Object> params = new HashMap<String, Object>();
	if( 
			(uf != null) && 
			( 
					(objUf == null) || 
					(!(uf.equals(objUf.getDescricaoUf())))
			)
	){
		params.put(UnidadeFederativa.UNIDADE_FEDERATIVA_POR_DESCRICAO_PARAM_NAME, uf);
		objUf = (UnidadeFederativa) getFactory().getResultList(QueryStrategy.NAMED, UnidadeFederativa.UNIDADE_FEDERATIVA_POR_DESCRICAO_QUERY_NAME,params);
		return objUf;
	}else{
		return objUf;
	}
}

public void setUf(UnidadeFederativa uf) {
	if((this.objUf = uf) != null){
		this.uf = uf.getDescricaoUf();
	}else{
		this.uf = null;
	}
}

public void setdDesemb(Date dDesemb) {
	this.dDesemb = dDesemb;
}

public String getcExportador() {
	return cExportador;
}

public void setcExportador(String cExportador) {
	this.cExportador = cExportador;
}

public Integer getId() {
	return id;
}

}

Opa, coloca seu código entre a tag code. não dá para entender seu código. outra coisa,

eu to perguntando onde o “e” do #{e.ndi} está sendo declarado. Você precisa declarar o e em algum lugar.

OBS.: O nome dos seus atributos estão horríveis! =P

Codigo do Di


package virtualsistemas.nfe.modelo;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Transient;

import virtualsistemas.controle.AbstractPersistenceFactory.QueryStrategy;
import virtualsistemas.nfe.controle.AbstractDAOClassNFE;

@Entity
@SuppressWarnings("serial")
public class Di extends AbstractDAOClassNFE<Integer>{
	
	@Id
	@Column(name="id_di")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;

	@OneToMany(cascade={CascadeType.PERSIST})
	@JoinColumn(name="id_di")
	private List<Adi> adi;
	
	private String ndi; //10 - Numero do documento de inportacao DI/DSI/DA
	
	private Date ddi; //Data de registro da DI/DSI/DA "AAAA-MM-DD"
	
	private String xLocDesemb; //60 - Local de desembarque
	 
	@Transient
	private UnidadeFederativa objUf;
	
	@Column(name="ufDesemb")
	private String uf; //2 - Sigla da Uf onde ocorreu o desembarque
	
	private Date dDesemb; //Data do desembarque "AAAA-MM-DD"
	
	private String cExportador; //60 - Codigo do fabricante estrangeiro
	
	public boolean comtemAdi(Integer codAdi){
		for(Adi d : getAdi() ){
			if(
					(codAdi != null)&&
					(d.getId() == codAdi)
			
			){
				return true;
			}
		}
		return false;
	}
	
	public List<Adi> getAdi() {
		if(adi == null){
			adi = new ArrayList<Adi>();
		}
		return adi;
	}

	public void addadi(Adi adi){
		getAdi().add(adi);
	}
	
	public void removeadi(Adi adi){
		getAdi().remove(adi);
	}
	
	public void setAdi(List<Adi> adi){
		this.adi = adi;
	}
	
	public String getNdi() {
		return ndi;
	}

	public void setNdi(String ndi) {
		this.ndi = ndi;
	}
	
	public Date getDdi() {
		return ddi;
	}

	public void setDdi(Date ddi) {
		this.ddi = ddi;
	}

	public String getxLocDesemb() {
		return xLocDesemb;
	}

	public void setxLocDesemb(String xLocDesemb) {
		this.xLocDesemb = xLocDesemb;
	}

	public Date getdDesemb() {
		return dDesemb;
	}
	
	public UnidadeFederativa getUf() {
		Map<String, Object> params = new HashMap<String, Object>();
		if( 
				(uf != null) && 
				( 
						(objUf == null) || 
						(!(uf.equals(objUf.getDescricaoUf())))
				)
		){
			params.put(UnidadeFederativa.UNIDADE_FEDERATIVA_POR_DESCRICAO_PARAM_NAME, uf);
			objUf = (UnidadeFederativa) getFactory().getResultList(QueryStrategy.NAMED, UnidadeFederativa.UNIDADE_FEDERATIVA_POR_DESCRICAO_QUERY_NAME,params);
			return objUf;
		}else{
			return objUf;
		}
	}

	public void setUf(UnidadeFederativa uf) {
		if((this.objUf = uf) != null){
			this.uf = uf.getDescricaoUf();
		}else{
			this.uf = null;
		}
	}

	public void setdDesemb(Date dDesemb) {
		this.dDesemb = dDesemb;
	}

	public String getcExportador() {
		return cExportador;
	}

	public void setcExportador(String cExportador) {
		this.cExportador = cExportador;
	}

	public Integer getId() {
		return id;
	}
	
}

e o codigo do jsf



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<ui:composition 
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:v="http://virtualsistemas.components"
	xmlns:f="http://java.sun.com/jsf/core"
	template="/cadastro/TelaNFE.xhtml">
	<ui:define name="conteudo">
		<h:outputScript library="js" name="telaNFE.js" target="head"/>
			<h:form id="alteraProduto" binding="#{cadastroProduto.form}" rendered="#{cadastroProduto.showProduto}">
				<table>
					<tr>
						<td>
							<h6><h:outputText value = "*Campos obrigatórios."/></h6>
						</td>
					</tr>
					<tr>
						<td align="center" colspan="4">
							<h5><h:outputText value="#{cadastroProduto.mensagem}"/></h5>
						</td>
					</tr>
				</table>
				<script>
					setFormAtual(document.getElementById('frmCadastroEmitente'));
					document.getElementById('btnEmitente').className = 'abaselecionada';
				</script>
			</h:form>
			<h:form id="listaProduto" rendered="#{cadastroProduto.showList}">
				<div align="center" style="overflow: auto; height: 250px;">
					<h:dataTable var="p" value="#{cadastroProduto.lista}" styleClass="selectTable">
						<h:column>
							<f:facet name="header">
								<h:outputText value="Código do Produto"/>				
							</f:facet>
							<h:outputText value="#{p.daoObject.id}"/>
						</h:column>
						<h:column>
							<f:facet name="header">
								<h:outputText value="Descrição do Produto"/>				
							</f:facet>
							<h:outputText value="#{p.daoObject.xProd}"/>
						</h:column>
						<h:column>
							<f:facet name="header">
								&nbsp;<h:commandButton value="Novo" action="#{cadastroProduto.novo}"/>
								<h:commandButton value="Voltar" action="#{cadastroProduto.setShowList}"/>
							</f:facet>
							<h:commandButton value="Alterar" action="#{p.alterar}"/>
							<h:commandButton value="Apagar" action="#{p.apagar}" onclick="return confirm('Deseja Apagar?')"/>
						</h:column>	
					</h:dataTable>
				</div>
		</h:form>
		<h:form  rendered="#{cadastroProduto.showDi}">
			<div align="center" style="overflow: auto; height: 250px;">	
				<h:dataTable var="e" value="#{cadastroProduto.getDaoObject().getDi()}" styleClass="selectTable">
						<h:column>	
							
								<h:column>
									<f:facet name="header">
										<h:outputText value="Data de Registro da DI/DSI/DA"/>				
									</f:facet>
									<h:outputText value="#{e.ndi}"/>
								</h:column>
								<h:column>
									<f:facet name="header">
										<h:outputText value="Local de Desembarque"/>				
									</f:facet>
									<h:outputText value="teste02"/>
								</h:column>
								<h:column>
									<f:facet name="header">
										&nbsp;<h:commandButton value="Adição" action="#{cadastroProduto.btnAvancar}"/>
									</f:facet>
								</h:column>	
								
								<f:facet name="header">
									<h:commandButton value="Voltar" action="#{cadastroProduto.btnVoltar}" />
								</f:facet>
						</h:column>
				</h:dataTable>		
			</div>
		</h:form>
		<h:form  rendered="#{cadastroProduto.showAlteraDi}">
				<h:outputText value="AlteraDi"/>
				<h:commandButton value="voltar" action="#{cadastroProduto.btnVoltar}" />
				<h:commandButton value="avançar" action="#{cadastroProduto.btnAvancar}"/>
		</h:form>
		<h:form  rendered="#{cadastroProduto.showListaAdi}">
				<h:outputText value="ListaADi"/><br />
				<h:commandButton value="voltar" action="#{cadastroProduto.btnVoltar}" />
				<h:commandButton value="avançar" action="#{cadastroProduto.btnAvancar}"/>
		</h:form>
		<h:form  rendered="#{cadastroProduto.showAlteraAdi}">
				<h:outputText value="Alterea Adi"/>
				<h:commandButton value="voltar" action="#{cadastroProduto.btnVoltar}" />
		</h:form>
	</ui:define>
</ui:composition>

e cara ainda tem o codigo da classe que estou dando acesso a jsf


package virtualsistemas.nfe.visao;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import virtualsistemas.nfe.controle.ModuloNfeFactory;
import virtualsistemas.nfe.modelo.Di;
import virtualsistemas.nfe.modelo.Produto;
import virtualsistemas.web.annotation.CommandAttributes;
import virtualsistemas.web.annotation.CommandButton;
import virtualsistemas.web.annotation.CommandButtonAttributes;
import virtualsistemas.web.annotation.ComponentAttributes;
import virtualsistemas.web.annotation.InnerField;
import virtualsistemas.web.annotation.Messages;
import virtualsistemas.web.annotation.PanelGridLayout;

@Messages
@ViewScoped
@PanelGridLayout(columnsByLine = { 4, 4, 4, 4, 8, 8 }, attributes = @ComponentAttributes(style = "width: 100%;"))
@ManagedBean(name = CadastroProduto.MANAGED_BEAN_NAME_NAVIGATION_RULE)
public class CadastroProduto extends CadastroManutencao<Produto> {

	public static final String MANAGED_BEAN_NAME_NAVIGATION_RULE = "cadastroProduto";
	
	
	private boolean showProduto = false;
	private boolean showDi = false;
	private boolean showAlteraDi =false;
	private boolean showListaAdi = false;
	private boolean showAlteraAdi = false;
	private boolean validaProduto;

	public CadastroProduto() {
		listar();
	}
	

	@InnerField
	private Produto daoObject;
	
	
	@Override
	public Produto getDaoObject() {
		if (daoObject == null) {
			daoObject = new Produto();
		}
		return daoObject;
	}

	@Override
	public void setDaoObject(Produto daoObject) {
		this.daoObject = daoObject;

	}
	
	public void btnVoltar(){
		if(showDi){
			showProduto = true;
			showDi = false;
		}else if(showAlteraDi){
			showAlteraDi=false;
			showDi = true;
		}else if(showListaAdi){
			showListaAdi = false;
			showAlteraDi = true;		
		}else if(showAlteraAdi){
			showAlteraAdi = false;
			showListaAdi = true;
		}
	}

	public void btnAvancar(){
		if(showDi){
			showDi= false;
			showAlteraDi = true;
		}else if(showAlteraDi){
			showAlteraDi = false;
			showListaAdi = true;
		}else if(showListaAdi){
			showListaAdi = false;
			showAlteraAdi = true;
		}
	}
	
	public boolean isShowProduto() {
		return (
					(!showDi)&& 
					(!(isShowList()))&&
					(!showAlteraDi)&&
					(!showListaAdi)&&
					(!showAlteraAdi)
				);
	}

	public boolean isShowDi() {
		return (
					(!(isShowList()))&& 
					(!showProduto)&&
					(showDi)&&
					(!showAlteraDi)&&
					(!showListaAdi)&&
					(!showAlteraAdi)
				);
	}
	
	public boolean isShowAlteraDi(){
		return (
					(!(isShowList()))&& 
					(!showProduto)&&
					(!showDi)&&
					(showAlteraDi)&&
					(!showListaAdi)&&
					(!showAlteraAdi)
				);
	}
	
	public boolean isShowListaAdi(){
		return (
					(!(isShowList()))&& 
					(!showProduto)&&
					(!showDi)&&
					(!showAlteraDi)&&
					(showListaAdi)&&
					(!showAlteraAdi)
				);
	}
	
	public boolean isShowAlteraAdi(){
		return (
					(!(isShowList()))&& 
					(!showProduto)&&
					(!showDi)&&
					(!showAlteraDi)&&
					(!showListaAdi)&&
					(showAlteraAdi)
				);
	}
	
	@Override
	public boolean isShowList() {
			return (
						(super.isShowList()) && 
						(!showProduto)&&
						(!showDi)&&
						(!showAlteraDi)&&
						(!showListaAdi)&&
						(!showAlteraAdi)
					);
	}
	
	@Override
	public void listar() {
		super.listar();
		showDi = false;
		showProduto = false;
		showAlteraDi = false;
		showListaAdi = false;
		showAlteraAdi = false;
	}

	@CommandButton(attributes = @CommandButtonAttributes(attributes = @CommandAttributes(value = "Declaração de Importação")))
	public void associaTributos() {
		setMensagem(null);

		if (isValidaProduto()) {
				showProduto = false;
				showDi = true;
				showAlteraDi = false;
				showListaAdi = false;
				showAlteraAdi = false;
		} else {
			setMensagem("É preciso ter um produto associado. Por favor, salve o produto.");
		}
	}

	@Override
	protected void carregaLista() {
		for (Produto prod : ModuloNfeFactory.getInstance().getAll(
				Produto.class, "order by xProd")) {
			getLista().add(new ListaDaoObject((Produto) prod));
		}
	}
	
	public boolean isValidaProduto() {
		if (
				(getDaoObject() != null) &&
				(getDaoObject().getId() != null)
			) {
			validaProduto = true;
		
		}else {
			validaProduto = false;
		}
		return validaProduto;
		
	}

	public void setValidaProduto(boolean validaProduto) {
		this.validaProduto = validaProduto;

	}
}

Alguem ajuda eu?

up ninguem respondeu

ja consegui resolver!!!

Opa, blz então.

Coloca a solução aqui para outras pessoas verem.

E edita o titulo do post e coloca [RESOLVIDO].

eu acho que vc esqueceu de mapear alguns atributos. tipo esse ndi so está declarado como private string o hibernate nao entendi.