Jsf conversao

1 resposta
T

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

<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(){   
        setKey("%");   
    }   
       
    public Pessoa getPessoa() {   
        return pessoa;   
    }   
  
    public void setPessoa(Pessoa pessoa) {   
        this.pessoa = pessoa;   
    }   
       
    public String novaPessoa(){   
        this.setPessoa(new Pessoa());   
        this.setTipoPessoa(new TipoPessoa());   
        return "novo";   
    }   
       
    public DataModel getBuscaTodasPessoas(){   
        PessoaDAO pessoaDAO=new PessoaDAO();   
        setModel(new ListDataModel(pessoaDAO.listarTodasPessoas()));           
        return getModel();   
    }   
       
    public DataModel getBuscaNomePessoas(){   
        PessoaDAO pessoaDAO=new PessoaDAO();   
        setModel(new ListDataModel(pessoaDAO.listarNomePessoas(this.getKey())));   
        return getModel();   
    }   
  
    public String getKey() {   
        return key;   
    }   
  
    public void setKey(String key) {   
        this.key = key;   
    }   
       
    public List <SelectItem> getBuscarTodosTipo(){   
           
        //listaItem.add(new SelectItem(Integer.parseInt("15"),"COMPRADOR"));   
        PessoaDAO pessoaDAO=new PessoaDAO();   
        Iterator <TipoPessoa> lista=pessoaDAO.listarTipoPessoas().iterator();           
        List <SelectItem> listaItens=new ArrayList();   
        TipoPessoa aux=null;   
        while(lista.hasNext()){   
            aux=lista.next();   
            listaItens.add(new SelectItem(aux.getId(),aux.getTipo()));   
        }           
        pessoaDAO=null;   
           
        return listaItens;           
    }   
       
    public String salvar(){   
        PessoaDAO pessoaDAO=new PessoaDAO();   
        //pessoa.getTipoPessoa().setId(tipoPessoa.getId());   
        pessoaDAO.salvar(pessoa);   
        pessoaDAO=null;   
        pessoa=null;   
        tipoPessoa=null;   
        return "sucessoIns";   
    }   
  
    public DataModel getModel() {   
        return model;   
    }   
  
    public void setModel(DataModel model) {   
        this.model = model;   
    }   
  
    public TipoPessoa getTipoPessoa() {   
        return tipoPessoa;   
    }   
  
    public void setTipoPessoa(TipoPessoa tipoPessoa) {   
        this.tipoPessoa = tipoPessoa;   
    }       
       
}  

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(FacesContext context,UIComponent componente, String value) throws ConverterException {
        TipoPessoa tp=new TipoPessoa();
        tp.setId(Integer.getInteger(value));        
        return tp;
        
    }
    
    public String getAsString(FacesContext context, UIComponent component, Object target) {
        if (target!=null){           
           
           return String.valueOf(target);
        }
         return null;
    }
    
    
    
} 

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(name="ID_PESSOA",nullable=false)
    private Integer id;
    
    @Column(name="CNPJ_CPF")
    private String cpfCnpj;
   
    @Column(name="NOME")
    private String nome;
    
    @Column(name="EMAIL")
    private String email;
        
    @Column(name="LOGIN")
    private String login;
    
    @Column(name="SENHA")
    private String senha;
    
    @ManyToOne
    @JoinColumn(name="ID_TIPO")
    private TipoPessoa tipoPessoa;
    
    @OneToMany(cascade=CascadeType.ALL,mappedBy="pessoa")
    private Collection <Endereco> enderecos;
    
    public Pessoa(){
       tipoPessoa=new TipoPessoa();
       tipoPessoa.setId(0);
       tipoPessoa.setTipo("");
    }
        
    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 String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

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

    public TipoPessoa getTipoPessoa() {
        return tipoPessoa;
    }

    public void setTipoPessoa(TipoPessoa tipoPessoa) {
        this.tipoPessoa = tipoPessoa;
    }

    public Collection<Endereco> getEnderecos() {
        return enderecos;
    }

    public void setEnderecos(Collection<Endereco> enderecos) {
        this.enderecos = enderecos;
    }

    public String getCpfCnpj() {
        return cpfCnpj;
    }

    public void setCpfCnpj(String cpfCnpj) {
        this.cpfCnpj = cpfCnpj;
    }
        
} 

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(name="ID_TIPO",nullable=false)
    private Integer id;
    
    @Column(name="TIPO")
    private String tipo;
    
    @OneToMany(cascade=CascadeType.ALL,mappedBy="tipoPessoa")
    private List <Pessoa> pessoal;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }      

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public List<Pessoa> getPessoal() {
        return pessoal;
    }

    public void setPessoal(List<Pessoa> pessoal) {
        this.pessoal = pessoal;
    }
    
       
        
} 

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(){
        return emf.createEntityManager();
    }
    
    public PessoaDAO() {
       emf=Persistence.createEntityManagerFactory("CotacaoPU");       
    }
    
    public void salvar(Pessoa pessoa){
        EntityManager em=getEntityManager();
        try{
            em.getTransaction().begin();
            em.persist(pessoa);
            em.getTransaction().commit();            
        }catch(Exception e){
            em.getTransaction().rollback();
            e.printStackTrace();
        }finally{
            em.close();
        }
    }
    
    public void atualizar(Pessoa pessoa){
        EntityManager em=getEntityManager();
        try{
            em.getTransaction().begin();
            em.merge(pessoa);
            em.getTransaction().commit();            
        }catch(Exception e){
            em.getTransaction().rollback();
            e.printStackTrace();
        }finally{
            em.close();
        }
    }
    
    public void excluir(Pessoa pessoa){
        EntityManager em=getEntityManager();
        try{
            em.getTransaction().begin();
            pessoa=em.merge(pessoa);
            em.remove(pessoa);
            em.getTransaction().commit();            
        }catch(Exception e){
            em.getTransaction().rollback();
            e.printStackTrace();
        }finally{
            em.close();
        }
    }
    
    public <Pessoa> List listarTodasPessoas(){
        EntityManager em=getEntityManager();
        try{
            Query q=em.createQuery("select p from Pessoa p");            
            return q.getResultList();
        }finally {
            em.close();
        }
    }
    
    public <Pessoa> List listarNomePessoas(String nomeDaPessoa){
        EntityManager em=getEntityManager();
        try{
            Query q=em.createQuery("select p from Pessoa p where p.nome LIKE ?1");
            
            q.setParameter(1,nomeDaPessoa);
            
            return q.getResultList();
            
        }finally {
            em.close();
        }
    }
    
    public List listarTipoPessoas(){
        EntityManager em=getEntityManager();
        try{
            Query q=em.createQuery("select p from TipoPessoa p");
                       
            return q.getResultList();
            
        }finally {
            em.close();
        }
    }
    
    
    
}

eu agradeço se alguem me dar uma "Luz..."

1 Resposta

M

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:

Criado 28 de novembro de 2007
Ultima resposta 29 de nov. de 2007
Respostas 1
Participantes 2