Jsf conversao

Ola, amigos Corinthianos, Palmeirense, São Paulinos, Flamenguistas, Vascainos, Fluiminense…Gremistas e Colorados…etc…

Estou estudando JSF e JPA e me deparei com uma grande dificuldade, eu estou tentando gravar o tipo da pessoa a partir de um comboBox, mas esta dificil, estou ficando maluco…e não consigo de jeito nenhum fazer esse cadastro funcionar esta dando o seguinte erro: "Validation Error: Value is not valid" eu fiz um converter personalizado…mas mesmo assim esta dando problema

Eu gostaria de saber…o que fazer…não consigo mas ver aonde esta o erro…abaixo vai o codigo

esse é o formulario de cadastro que tem o select one

[code]<h:selectOneMenu id="tipoPessoa" value="#{pessoaView.tipoPessoa}" converter="converteInteiroTipoPessoa">
<f:selectItems value="#{pessoaView.buscarTodosTipo}" id="tipoDePessoa"/>
</h:selectOneMenu>
<h:selectOneMenu id="tipoPessoa" value="#{pessoaView.tipoPessoa}" converter="converteInteiroTipoPessoa">
<f:selectItems value="#{pessoaView.buscarTodosTipo}" id="tipoDePessoa"/>
</h:selectOneMenu>

faces-config.xml
view plaincopy to clipboardprint?
<converter>
<converter-id>converteInteiroTipoPessoa</converter-id>
<converter-class>
br.com.addigital.util.converterInteiroObjeto
</converter-class>
</converter>
<managed-bean>
<managed-bean-name>pessoaView</managed-bean-name>
<managed-bean-class>br.com.addigital.controller.PessoaController</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<converter>
<converter-id>converteInteiroTipoPessoa</converter-id>
<converter-class>
br.com.addigital.util.converterInteiroObjeto
</converter-class>
</converter>
<managed-bean>
<managed-bean-name>pessoaView</managed-bean-name>
<managed-bean-class>br.com.addigital.controller.PessoaController</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

meu bean de controle PessoaController.java
package br.com.addigital.controller;

import br.com.addigital.cotacao.Pessoa;
import br.com.addigital.cotacao.TipoPessoa;
import br.com.addigital.DAO.PessoaDAO;
import java.util.ArrayList;
import java.util.Iterator;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.faces.component.html.HtmlSelectOneMenu;
import java.util.List;

public class PessoaController {

private Pessoa pessoa;   
   
private DataModel model;   
   
private String key;   
   
private TipoPessoa tipoPessoa;   
   
       
public PessoaController&#40;&#41;&#123;   
    setKey&#40;&quot;%&quot;&#41;;   
&#125;   
   
public Pessoa getPessoa&#40;&#41; &#123;   
    return pessoa;   
&#125;   

public void setPessoa&#40;Pessoa pessoa&#41; &#123;   
    this.pessoa = pessoa;   
&#125;   
   
public String novaPessoa&#40;&#41;&#123;   
    this.setPessoa&#40;new Pessoa&#40;&#41;&#41;;   
    this.setTipoPessoa&#40;new TipoPessoa&#40;&#41;&#41;;   
    return &quot;novo&quot;;   
&#125;   
   
public DataModel getBuscaTodasPessoas&#40;&#41;&#123;   
    PessoaDAO pessoaDAO=new PessoaDAO&#40;&#41;;   
    setModel&#40;new ListDataModel&#40;pessoaDAO.listarTodasPessoas&#40;&#41;&#41;&#41;;           
    return getModel&#40;&#41;;   
&#125;   
   
public DataModel getBuscaNomePessoas&#40;&#41;&#123;   
    PessoaDAO pessoaDAO=new PessoaDAO&#40;&#41;;   
    setModel&#40;new ListDataModel&#40;pessoaDAO.listarNomePessoas&#40;this.getKey&#40;&#41;&#41;&#41;&#41;;   
    return getModel&#40;&#41;;   
&#125;   

public String getKey&#40;&#41; &#123;   
    return key;   
&#125;   

public void setKey&#40;String key&#41; &#123;   
    this.key = key;   
&#125;   
   
public List &lt;SelectItem&gt; getBuscarTodosTipo&#40;&#41;&#123;   
       
    //listaItem.add&#40;new SelectItem&#40;Integer.parseInt&#40;&quot;15&quot;&#41;,&quot;COMPRADOR&quot;&#41;&#41;;   
    PessoaDAO pessoaDAO=new PessoaDAO&#40;&#41;;   
    Iterator &lt;TipoPessoa&gt; lista=pessoaDAO.listarTipoPessoas&#40;&#41;.iterator&#40;&#41;;           
    List &lt;SelectItem&gt; listaItens=new ArrayList&#40;&#41;;   
    TipoPessoa aux=null;   
    while&#40;lista.hasNext&#40;&#41;&#41;&#123;   
        aux=lista.next&#40;&#41;;   
        listaItens.add&#40;new SelectItem&#40;aux.getId&#40;&#41;,aux.getTipo&#40;&#41;&#41;&#41;;   
    &#125;           
    pessoaDAO=null;   
       
    return listaItens;           
&#125;   
   
public String salvar&#40;&#41;&#123;   
    PessoaDAO pessoaDAO=new PessoaDAO&#40;&#41;;   
    //pessoa.getTipoPessoa&#40;&#41;.setId&#40;tipoPessoa.getId&#40;&#41;&#41;;   
    pessoaDAO.salvar&#40;pessoa&#41;;   
    pessoaDAO=null;   
    pessoa=null;   
    tipoPessoa=null;   
    return &quot;sucessoIns&quot;;   
&#125;   

public DataModel getModel&#40;&#41; &#123;   
    return model;   
&#125;   

public void setModel&#40;DataModel model&#41; &#123;   
    this.model = model;   
&#125;   

public TipoPessoa getTipoPessoa&#40;&#41; &#123;   
    return tipoPessoa;   
&#125;   

public void setTipoPessoa&#40;TipoPessoa tipoPessoa&#41; &#123;   
    this.tipoPessoa = tipoPessoa;   
&#125;       

}

Minha conversao personalizada

package br.com.addigital.util;
import java.text.ParseException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import br.com.addigital.cotacao.Pessoa;
import br.com.addigital.cotacao.TipoPessoa;
import javax.faces.component.html.HtmlSelectOneMenu;

public class converterInteiroObjeto implements Converter {

public Object getAsObject&#40;FacesContext context,UIComponent componente, String value&#41; throws ConverterException &#123;
    TipoPessoa tp=new TipoPessoa&#40;&#41;;
    tp.setId&#40;Integer.getInteger&#40;value&#41;&#41;;        
    return tp;
    
&#125;

public String getAsString&#40;FacesContext context, UIComponent component, Object target&#41; &#123;
    if &#40;target!=null&#41;&#123;           
       
       return String.valueOf&#40;target&#41;;
    &#125;
     return null;
&#125;

}

Meu bean de Pessoa.java

package br.com.addigital.cotacao;

import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="PESSOA")
public class Pessoa implements java.io.Serializable {

@Id
@Column&#40;name=&quot;ID_PESSOA&quot;,nullable=false&#41;
private Integer id;

@Column&#40;name=&quot;CNPJ_CPF&quot;&#41;
private String cpfCnpj;

@Column&#40;name=&quot;NOME&quot;&#41;
private String nome;

@Column&#40;name=&quot;EMAIL&quot;&#41;
private String email;
    
@Column&#40;name=&quot;LOGIN&quot;&#41;
private String login;

@Column&#40;name=&quot;SENHA&quot;&#41;
private String senha;

@ManyToOne
@JoinColumn&#40;name=&quot;ID_TIPO&quot;&#41;
private TipoPessoa tipoPessoa;

@OneToMany&#40;cascade=CascadeType.ALL,mappedBy=&quot;pessoa&quot;&#41;
private Collection &lt;Endereco&gt; enderecos;

public Pessoa&#40;&#41;&#123;
   tipoPessoa=new TipoPessoa&#40;&#41;;
   tipoPessoa.setId&#40;0&#41;;
   tipoPessoa.setTipo&#40;&quot;&quot;&#41;;
&#125;
    
public Integer getId&#40;&#41; &#123;
    return id;
&#125;

public void setId&#40;Integer id&#41; &#123;
    this.id = id;
&#125;

public String getNome&#40;&#41; &#123;
    return nome;
&#125;

public void setNome&#40;String nome&#41; &#123;
    this.nome = nome;
&#125;

public String getEmail&#40;&#41; &#123;
    return email;
&#125;

public void setEmail&#40;String email&#41; &#123;
    this.email = email;
&#125;

public String getLogin&#40;&#41; &#123;
    return login;
&#125;

public void setLogin&#40;String login&#41; &#123;
    this.login = login;
&#125;

public String getSenha&#40;&#41; &#123;
    return senha;
&#125;

public void setSenha&#40;String senha&#41; &#123;
    this.senha = senha;
&#125;  

public TipoPessoa getTipoPessoa&#40;&#41; &#123;
    return tipoPessoa;
&#125;

public void setTipoPessoa&#40;TipoPessoa tipoPessoa&#41; &#123;
    this.tipoPessoa = tipoPessoa;
&#125;

public Collection&lt;Endereco&gt; getEnderecos&#40;&#41; &#123;
    return enderecos;
&#125;

public void setEnderecos&#40;Collection&lt;Endereco&gt; enderecos&#41; &#123;
    this.enderecos = enderecos;
&#125;

public String getCpfCnpj&#40;&#41; &#123;
    return cpfCnpj;
&#125;

public void setCpfCnpj&#40;String cpfCnpj&#41; &#123;
    this.cpfCnpj = cpfCnpj;
&#125;

}

TipoPessoa

package br.com.addigital.cotacao;

import java.util.List;
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.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import br.com.addigital.cotacao.Pessoa;

@Entity
@Table(name="TIPOPESSOA")
public class TipoPessoa implements java.io.Serializable {

@Id
@Column&#40;name=&quot;ID_TIPO&quot;,nullable=false&#41;
private Integer id;

@Column&#40;name=&quot;TIPO&quot;&#41;
private String tipo;

@OneToMany&#40;cascade=CascadeType.ALL,mappedBy=&quot;tipoPessoa&quot;&#41;
private List &lt;Pessoa&gt; pessoal;

public Integer getId&#40;&#41; &#123;
    return id;
&#125;

public void setId&#40;Integer id&#41; &#123;
    this.id = id;
&#125;      

public String getTipo&#40;&#41; &#123;
    return tipo;
&#125;

public void setTipo&#40;String tipo&#41; &#123;
    this.tipo = tipo;
&#125;

public List&lt;Pessoa&gt; getPessoal&#40;&#41; &#123;
    return pessoal;
&#125;

public void setPessoal&#40;List&lt;Pessoa&gt; pessoal&#41; &#123;
    this.pessoal = pessoal;
&#125;

}

PessoaDAO

package br.com.addigital.DAO;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import br.com.addigital.cotacao.TipoPessoa;
import br.com.addigital.cotacao.Pessoa;

public class PessoaDAO {

private EntityManagerFactory emf;

private EntityManager getEntityManager&#40;&#41;&#123;
    return emf.createEntityManager&#40;&#41;;
&#125;

public PessoaDAO&#40;&#41; &#123;
   emf=Persistence.createEntityManagerFactory&#40;&quot;CotacaoPU&quot;&#41;;       
&#125;

public void salvar&#40;Pessoa pessoa&#41;&#123;
    EntityManager em=getEntityManager&#40;&#41;;
    try&#123;
        em.getTransaction&#40;&#41;.begin&#40;&#41;;
        em.persist&#40;pessoa&#41;;
        em.getTransaction&#40;&#41;.commit&#40;&#41;;            
    &#125;catch&#40;Exception e&#41;&#123;
        em.getTransaction&#40;&#41;.rollback&#40;&#41;;
        e.printStackTrace&#40;&#41;;
    &#125;finally&#123;
        em.close&#40;&#41;;
    &#125;
&#125;

public void atualizar&#40;Pessoa pessoa&#41;&#123;
    EntityManager em=getEntityManager&#40;&#41;;
    try&#123;
        em.getTransaction&#40;&#41;.begin&#40;&#41;;
        em.merge&#40;pessoa&#41;;
        em.getTransaction&#40;&#41;.commit&#40;&#41;;            
    &#125;catch&#40;Exception e&#41;&#123;
        em.getTransaction&#40;&#41;.rollback&#40;&#41;;
        e.printStackTrace&#40;&#41;;
    &#125;finally&#123;
        em.close&#40;&#41;;
    &#125;
&#125;

public void excluir&#40;Pessoa pessoa&#41;&#123;
    EntityManager em=getEntityManager&#40;&#41;;
    try&#123;
        em.getTransaction&#40;&#41;.begin&#40;&#41;;
        pessoa=em.merge&#40;pessoa&#41;;
        em.remove&#40;pessoa&#41;;
        em.getTransaction&#40;&#41;.commit&#40;&#41;;            
    &#125;catch&#40;Exception e&#41;&#123;
        em.getTransaction&#40;&#41;.rollback&#40;&#41;;
        e.printStackTrace&#40;&#41;;
    &#125;finally&#123;
        em.close&#40;&#41;;
    &#125;
&#125;

public &lt;Pessoa&gt; List listarTodasPessoas&#40;&#41;&#123;
    EntityManager em=getEntityManager&#40;&#41;;
    try&#123;
        Query q=em.createQuery&#40;&quot;select p from Pessoa p&quot;&#41;;            
        return q.getResultList&#40;&#41;;
    &#125;finally &#123;
        em.close&#40;&#41;;
    &#125;
&#125;

public &lt;Pessoa&gt; List listarNomePessoas&#40;String nomeDaPessoa&#41;&#123;
    EntityManager em=getEntityManager&#40;&#41;;
    try&#123;
        Query q=em.createQuery&#40;&quot;select p from Pessoa p where p.nome LIKE ?1&quot;&#41;;
        
        q.setParameter&#40;1,nomeDaPessoa&#41;;
        
        return q.getResultList&#40;&#41;;
        
    &#125;finally &#123;
        em.close&#40;&#41;;
    &#125;
&#125;

public List listarTipoPessoas&#40;&#41;&#123;
    EntityManager em=getEntityManager&#40;&#41;;
    try&#123;
        Query q=em.createQuery&#40;&quot;select p from TipoPessoa p&quot;&#41;;
                   
        return q.getResultList&#40;&#41;;
        
    &#125;finally &#123;
        em.close&#40;&#41;;
    &#125;
&#125;

}[/code]

eu agradeço se alguem me dar uma “Luz…”

Opa,

você está passando um inteiro durante a geração da lista de itens e está convertendo em objeto TipoPessoa, ou você só usa inteiro ou só tipopessoa.

:okok: