JSF 2.0 Problema com PropertyNotFound Exception [RESOLVIDO]

Pessoal, será que alguém poderia me ajudar?

estou com um problema na hora de salvar ou atualizar um vendedor, o problema é no selectonemenu com o id=“vendedorInterno” do vendedor interno, no momento que clico no salvar, recebo um propertynotfound exception

tenho uma entidade de Produtos que funciona sem problemas com ENUMS dentro do selectonemenu, mas esse caso com uma entidade estou tendo problemas.

no codigo abaixo, caso tenha algo a mais a melhorar estou aberto a sugestões, pois estou iniciando com java

Segue abaixo os codigos:

Vendedor.java


package br.com.dpv.domain.vo.vendedor;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.dpv.domain.vo.pedido.Pedido;
import br.com.dpv.infrastructure.enums.TipoVendedor;

@Entity
@Table(name="vendedor")
public class Vendedor implements Serializable{

	private static final long serialVersionUID = 7908603021442938975L;
	
	@Id
	@SequenceGenerator(name = "vendedor_id", sequenceName = "vendedor_id_seq", allocationSize = 1 )
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="vendedor_id")
	@Column(unique = true, nullable=false)
	private Integer id;
	
	@Column
	private String nome;
	
	@Column
	private String email;
	
	@Column
	private String senha;
	
	@OneToMany
	private List<Pedido> pedidos;
	
	@Column
	@Enumerated(EnumType.STRING)
	private TipoVendedor tipo;
	
	//@Column(name = "vendedor_interno")
	@ManyToOne
	@JoinTable(name = "Vendedor")
	@JoinColumn(name="vendedor_interno")
	private Vendedor vendedorInterno;
	
	public Vendedor(){
		super();
	}
	
	
	public Vendedor(String nome, String email,TipoVendedor tipo,Vendedor vendedorInterno){
		this.nome = nome;
		this.email = email;
		this.tipo = tipo;
		this.vendedorInterno = vendedorInterno;
	}
	
	public Vendedor(String nome, String email,TipoVendedor tipo){
		this.nome = nome;
		this.email = email;
		this.tipo = tipo;
	}

	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}

	public List<Pedido> getPedidos() {
		return pedidos;
	}

	public void setPedidos(List<Pedido> pedidos) {
		this.pedidos = pedidos;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public TipoVendedor getTipo() {
		return tipo;
	}

	public void setTipo(TipoVendedor tipo) {
		this.tipo = tipo;
	}
	
	public String getTipoValues(){
		return tipo.getTipo();
	}	

	public Vendedor getVendedorInterno() {
		return vendedorInterno;
	}

	public void setVendedorInterno(Vendedor vendedorInterno) {
		this.vendedorInterno = vendedorInterno;
	}
	

	
}


VendedorMB.java


package br.com.dpv.ui.managedBeans;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.inject.Inject;

import br.com.dpv.domain.services.vendedor.VendedorService;
import br.com.dpv.domain.vo.vendedor.Vendedor;
import br.com.dpv.infrastructure.enums.TipoVendedor;

//@Named("vendedorMB")
@ManagedBean(name = "vendedorMB")

public class VendedorMB implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Inject 
	private VendedorService vendedorService;
	
	@Inject
	private Vendedor selectedVendedor = null;
	
	private List<Vendedor> vendedores;
	
	private List<Vendedor> vendedoresInternos;
	
	public List<Vendedor> getVendedores() {
		try{
			if (vendedores == null) {
				vendedores = vendedorService.listarTodosVendedores();
			}

		}
		catch(Exception e){
			e.getMessage();
		}
		return  vendedores;
	}
	
	public void setVendedores(List<Vendedor> v){
		this.vendedores = v;
	}
	
	public void salvarVendedor(Vendedor v){		
		System.out.println("Salvando vendedor.");
		
		try {
			if (v.getId() == 0) { 
				v.setId(null);
			}			
			System.out.println("salvando vendedor " + v.getNome() + " - " + v.getVendedorInterno().getNome());
			vendedorService.salvarVendedor(v);
		} catch (Exception e) {			
			e.getMessage();
		}	
	}
	
	public TipoVendedor[] getTipoValues(){
		return TipoVendedor.values();
	}
	

	public Vendedor getSelectedVendedor() {
		return selectedVendedor;
	}

	public void setSelectedVendedor(Vendedor selectedVendedor) {
		this.selectedVendedor = selectedVendedor;
	}

	public List<Vendedor> getVendedoresInternos() {
		try{
			if (vendedoresInternos == null) {				
				vendedoresInternos = vendedorService.listarVendedoresInternos();
			}

		}
		catch(Exception e){
			e.getMessage();
		}
		return  vendedoresInternos;

	}

	public void setVendedoresInternos(List<Vendedor> vendedoresInternos) {
		this.vendedoresInternos = vendedoresInternos;
	}
	
	

}

vendedores.xhtml


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:ui="http://java.sun.com/jsf/facelets"
	  xmlns:p="http://primefaces.prime.com.tr/ui">

<h:head>
	<title>Vendedor</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />	
</h:head>
<h:body>	
	<ui:composition template="template.xhtml">
	
		<ui:define name="content">
		<p:panel>
		<div class="loader">
		
		<p:ajaxStatus> 
			 
		    <f:facet name="start">  
		        <h:outputText value="Aguarde..." />  
		    </f:facet>  
		      
		    <f:facet name="complete">  
		        <h:outputText value="" />  
		    </f:facet>
		      
		</p:ajaxStatus>

		</div>  
		
		<h:form prependId="true" id="formVendedores">
			<p:panel>
	        		<p:commandButton oncomplete="dialogEditor.show()" 
	        						 update=":formEditor:vendedorEditor"
	        						 value="Novo vendedor"	        						   						 
	        						 image="ui-icon ui-icon-document">	        			
	        		      <f:setPropertyActionListener value="#{null}" target="#{vendedorMB.selectedVendedor}" />
	        		</p:commandButton>
	        		      
			</p:panel>			

			<p:dataTable value="#{vendedorMB.vendedores}"
						 var="vend"
						 id="listVendedores"
						 rows="15"
						 selection="#{vendedorMB.selectedVendedor}"
						 selectionMode="single"
						 paginator="true"
						 emptyMessage="Nenhum vendedor encontrado.">
			
			<p:column headerText="Vendedor"
					  sortBy="#{vend.nome}">
			
				<h:outputText value="#{vend.nome}" />
			</p:column>
			
			<p:column headerText="E-mail"
					  sortyBy="#{vend.email}">
				
				<h:outputText value="#{vend.email}" />
			</p:column>
			
			<p:column headerText="Tipo de Vendedor"
					  sortBy="#{vend.tipo}">
					
				<h:outputText value="#{vend.tipoValues}" />
			
			</p:column>
			
			<p:column headerText="Vendedor Interno"
					  sortBy="#{vend.vendedorInterno.nome}">
			
				<h:outputText value="#{vend.vendedorInterno.nome}" />
			</p:column>
			
	        <p:column headerText="Opções">
	        		<p:commandButton oncomplete="dialogEditor.show()" 
	        						 update=":formEditor:vendedorEditor"
	        						 value="editar"  						 
	        						 image="ui-icon ui-icon-pencil">	        			
	        		      <f:setPropertyActionListener value="#{vend}" target="#{vendedorMB.selectedVendedor}" />
	        		</p:commandButton>
	        </p:column>
		</p:dataTable>			
			
		</h:form>
		
		<h:form prependId="true" id="formEditor">
		<p:dialog header="Edição de Vendedor" 
				  widgetVar="dialogEditor"
				  resizable="false"
				  modal="true"
				  width="700" 
				  height="550">				  							    
		    
		    <p:panel header="Informações do Vendedor">
		    <h:panelGrid columns="3" 
		    			 border="0"
		    			 id="vendedorEditor">		

				<p:column>
			    <h:outputText value="Vendedor"  />
			    </p:column>
			    <p:column>
			    <p:inputText value="#{vendedorMB.selectedVendedor.nome}"
			    			 required="true"
			    			 id="nameError"
			    			 size="40"
			    			 requiredMessage="Preencha o nome. "/> 
			    </p:column>
			    <p:column>
			    	<p:message for="nameError" />
			    </p:column>
			    
			    <p:column>
			    <h:outputText value="Tipo"/>
			    </p:column>
			    
			    <p:column>
			    <h:selectOneMenu value="#{vendedorMB.selectedVendedor.tipo}" 
			    				 required="true"
			    				 id="selectTipo"
			    				 requiredMessage="Selecione o tipo.">
			    	<f:selectItem itemValue="#{null}"
			    				  itemLabel="Selecione"/>			    
			    	<f:selectItems value="#{vendedorMB.tipoValues}" 
			    				   var="vr"
			    				   itemValue="#{vr}"
			    				   itemLabel="#{vr.tipo}"/>
			    </h:selectOneMenu>
			    </p:column>			    
			    <p:column>
			    <p:message for="selectTipo" /> 
			    </p:column>
			    <p:column>
			    	<h:outputText value="Senha" />
			    </p:column>
			    <p:column>
			    	<div>
			    	<p:password value="#{vendedorMB.selectedVendedor.senha}"
			    				promptLabel="Digite uma senha"
			    				weakLabel="Senha com segurança fraca"
			    				strongLabel="Senha com alta segurança"
			    				goodLabel="Senha com média segurança"
			    				required="true"
			    				requiredMessage="Senha deve ser preenchida"
			    				feedback="true" 
			    				inline="true"			    				
			    				id="selectSenha"
			    				minLength="6" />
			    	</div>
			    </p:column>
			    <p:column>
			    	<p:message for="selectSenha" />
			    </p:column>
			    
			    <p:column>
			    	<h:outputText value="Vendedor Interno" />			    	
			    </p:column>
			    <p:column>
			    <div>
			    <h:selectOneMenu value="#{vendedorMB.selectedVendedor.vendedorInterno.id}"			    				 
			    				 id="vendedorInterno"
			    				 requiredMessage="Selecione o vendedor interno.">
			    	<f:selectItem itemValue="#{null}"
			    				  itemLabel="Selecione"/>			    
			    	
			    	<f:selectItems value="#{vendedorMB.vendedoresInternos}" 
			    				   var="vi"
			    				   itemValue="#{vi.vendedorInterno.id}"
			    				   itemLabel="#{vi.vendedorInterno.id} - #{vi.vendedorInterno.nome}"/>
			    </h:selectOneMenu>
			    </div>
			    </p:column>			    
			    <p:column>
			    <p:message for="selectTipo" /> 
			    </p:column>
			    
			    <p:column> </p:column>
			    <p:column>
			    
			    <p:commandButton value="Salvar"			    				 
			    				 oncomplete="handleEditorRequest(xhr, status, args)"
			    				 update=":formVendedores, :formEditor:vendedorEditor" 
			    				 actionListener="#{vendedorMB.salvarVendedor(vendedorMB.selectedVendedor)}" />
			    
			    <p:commandButton	value="cancelar"
			    					type="none"	
			    					immediate="true"
			    					update=":formEditor:messagesEditor, :formVendedores:vendedoresMessages"					    									    									    				 
			    					oncomplete="dialogEditor.hide();return false;" />
			    				 
			    <h:inputHidden value="#{vendedorMB.selectedVendedor.id}" />			    			    
			    </p:column>
			    <p:column> </p:column>

			</h:panelGrid>
						
			</p:panel>						  
		</p:dialog>				
		</h:form>
		</p:panel>
		
		</ui:define>
		
	</ui:composition>
</h:body>

</html>

se precisarem do codigo fonte posso estar enviando

obrigado.

cara,

faz o seguinte

<p:commandButton value="Salvar"                                 
                                 oncomplete="handleEditorRequest(xhr, status, args)"  
                                 update=":formVendedores, :formEditor:vendedorEditor"   
                                 actionListener="#{vendedorMB.salvarVendedor}" >  
<f:setPropertyActionListener value="#{selectedVendedor}" target="#{vendedorMB.selectedVendedor}"/>
</p:commandButton>

e na sua classe vendedorMB, no salvarVendedor, nao vai receber nenhum parametro.

ve se funciona

t+

Obrigado pela resposta rápida alison, fiz a mudança conforme você disse, mas o erro continua, segue abaixo:

/vendedores.xhtml  @167,61 value="#vendedorMB.selectedVendedor.vendedorInterno.id}": Target Unreachable, 'vendedorInterno' returned null: javax.el.PropertyNotFoundException

Olá Fabio zanardi.

Analisando teu código não consegui indentificar aonde você estancia o vendedor_interno pois quando vc manda ele salvar este objeto retorna null. sendo assim impossivel você salvar este objeto.

tente fazer um lazy dentro do getVendedor_interno;

lazy = if (objeto == null){
objeto = new Objeto();
}
return objeto;
espero ter ajudado!

Ele na verdade é um atributo do vendedor entendeu?

Na listagem ele é carregado normalmente, e até na exibição aparece e seleciona a combo correta sem problemas, o erro persiste na hora que vou salvare, se precisar posso disponibilizar o codigo completo,

tentarei a ideia que voce deu e retorno caso funcione,

obrigado pela ajuda!

Bom dia Fábio,

Vou arriscar um palpite: Eu acho que é o escopo do seu manegedBean, posso falar algo erro, caso acontecer me corrija: Quando você Editar um vendendor, ele seta o vendedor selecionado na sua propriedade do managedBean, certo!? Seria legal se você debugasse o SET para ver se este vendedor esta realmente entrando lá corretinho e tudo mais.

Depois que você setou este vendedor, a sua requisisção acabou, logo seu MB morreu, perdendo o valor que você acabou de injetar, quando você vai salvar não existe mais o valor, logo você recebe um null no parametro do método salvar!

Por favor, tente colocar @ViewScoped em cima do nome da sua classe para sabermos se é realmente os escopos de requisição do seu manegedBean.

Obrigado, espero retorno

Bem observado pelo guilhermehkr.

pode ser o escopo também não tinha reparado nisso!

cara,

esse erro ocorreu pq sua variavel vendedorInterno esta null, basta instanciar essa variavel.

t+

Valeu galera, vou tentar mudar para viewscoped, com sessionscoped eu resolvi mas ele não pegava o valor atualizado

se der certo eu aviso!

obrigado mesmo.

Legal.

Mas tente não usar @SessionScoped, afinal parece que seu manegedBean não é deste tipo, e sim do tipo @ViewScoped.
Se o valor não vier atualizado, talvez falte um reRender, ou no caso do primeFaces, update no componente que receber este valor!

espero ter ajudado e que tenha entendido os escopos do JSF.
Abraços.

Galera, o @ViewScoped me deu um erro de serialização, porém com sessionscoped o problema foi parcialmente resolvido, agora o vendedorinterno vai no bean, porém sempre com o mesmo valor que acredito que mantém da sessão, tem alguma forma de limparmos isso a cada vendedor que eu editar?

guilhermehkr, como view aparece certinho, mas na hora que abro o dialog para editar e mando salvar que da a exception, entendeu?

se precisar posso disponibilizar os codigos sem problema

abraço e muito obrigado

Boa noite,

então fazer um mb de session e ficar controlando a limpeza dele não é nada bom.
Faz assim, posta esta exception de quando usou @ViewScoped, vai funcionar com este escopo, não irá precisar usar session!

Olha, se deu problema de serialização, posso ja arriscar um papilte: Seus JavaBeans e ManegedBeans implementam a interface serializable ?
Se não implementam, com certeza irá dar este tipico erro de serialização quando se usa JSF.

mas faz assim, teste de novo com @ViewScoped e posta a exception.!

Se não resolver desta forma, dai vemos o esquema do analisar o código todo.

Abraços, tamo junto!

Olá, fiz todo fluxo view até o hibernate implementar serializable e mudei o escopo para viewscoped, mas o erro persiste, segue abaixo o debug


java.io.NotSerializableException: org.jboss.as.jpa.container.TransactionScopedEntityManager
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at java.util.HashMap.writeObject(Unknown Source)
	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 java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeArray(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at java.util.HashMap.writeObject(Unknown Source)
	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 java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:325)
	at com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:173)
	at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122)
	at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:159)
	at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:416)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139)
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57)
	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:49)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952)
	at java.lang.Thread.run(Unknown Source)

Valeu galera.

Olha eu nunca vi este erro desta forma, de dentro do jboss.

O serializable é necessário nos Entity, MenagedBean … Se faltar algum, por favor me corrijam.
Olha talvez tenhamos que fazer o esquema do código.

Se quiser, é claro!
Abraços

Olá guilherme, sem problemas

o codigo como projeto do eclipse está disponivel no endereço:

www.waio.com.br/dpv/codigo.zip

o modelo do pgsql também está junto, estou muito pto da vida com esse erro, rs, faz 1 semana que enrosquei ai, e como não tenho muita experiencia com java tá dificil de arrumar

muito obrigado

se puder me ajudar corrigir isso no codigo e me explicar o que ocorre para aprender ficaria muito grato, como disse comecei agora e estou preso nesse problema

Olá pessoal, alguém conseguiu descobrir o problema?

obrigado.

Pessoal, consegui resolver o problema com as dicas aqui passadas, obrigado por todos que ajudaram

se alguém estiver passando por algum problema do mesmo tipo pode responder esse tópico

valeu!