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">
<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">
<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;
}
}
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.