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.