Converter JSF TopLink

Galera o seguinte. tenho o meu formulário de cadastrar propriedade nele tenho um campo para digitar o CPF do produtor que é o dono da propriedade. Então uso um Converter para poder pega o CPF e converter em um Objeto do tipo Produtor. O problema é ele não ta retornando objeto quando chega na linha do Try-Catch já retorna null que está no catch. O que faço? Já ia esquecendo a opção de converter o Objeto Produtor na String do CPF ta funcionando perfeitamente.

[code]public class ConverterProdutor implements Converter{

private ProdutorController pc = new ProdutorController();

public Object getAsObject(FacesContext context, UIComponent component, String value){

    
    try{
    
   for(Iterator<?> iter = pc.getFacade().findAll().iterator(); iter.hasNext();){
       Produtor p = (Produtor)iter.next();

       if(p.getCpfProdutor().equals(value))
           return p;
   }

   return null;

    }catch(Exception e){

        return null;
    }


}

public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException{

    if(value == null){

        return null;
    }

    if(value instanceof Produtor){

        Produtor o = (Produtor) value;

        return "" + o.getCpfProdutor();
    }else{
       return null;
    }


}

}[/code]

Classe produtor

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package gestao.entity;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
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.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
*

  • @author arimateia
    */
    @Entity
    @Table(name = “produtor”)
    @NamedQueries({@NamedQuery(name = “Produtor.findAll”, query = “SELECT p FROM Produtor p”), @NamedQuery(name = “Produtor.findByIdProdutor”, query = “SELECT p FROM Produtor p WHERE p.idProdutor = :idProdutor”), @NamedQuery(name = “Produtor.findByCpfProdutor”, query = “SELECT p FROM Produtor p WHERE p.cpfProdutor = :cpfProdutor”), @NamedQuery(name = “Produtor.findByNomeProdutor”, query = “SELECT p FROM Produtor p WHERE p.nomeProdutor = :nomeProdutor”), @NamedQuery(name = “Produtor.findByEdnProdutor”, query = “SELECT p FROM Produtor p WHERE p.ednProdutor = :ednProdutor”), @NamedQuery(name = “Produtor.findByCidadeProdutor”, query = “SELECT p FROM Produtor p WHERE p.cidadeProdutor = :cidadeProdutor”), @NamedQuery(name = “Produtor.findByUfProdutor”, query = “SELECT p FROM Produtor p WHERE p.ufProdutor = :ufProdutor”), @NamedQuery(name = “Produtor.findByFoneProdutor”, query = “SELECT p FROM Produtor p WHERE p.foneProdutor = :foneProdutor”), @NamedQuery(name = “Produtor.findByDataRegProdutor”, query = “SELECT p FROM Produtor p WHERE p.dataRegProdutor = :dataRegProdutor”)})
    public class Produtor implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = “idProdutor”)
    private Integer idProdutor;
    @Basic(optional = false)
    @Column(name = “cpfProdutor”)
    private String cpfProdutor;
    @Column(name = “nomeProdutor”)
    private String nomeProdutor;
    @Column(name = “ednProdutor”)
    private String ednProdutor;
    @Column(name = “cidadeProdutor”)
    private String cidadeProdutor;
    @Column(name = “ufProdutor”)
    private String ufProdutor;
    @Column(name = “foneProdutor”)
    private Integer foneProdutor;
    @Column(name = “dataRegProdutor”)
    @Temporal(TemporalType.DATE)
    private Date dataRegProdutor;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “fkProdutor”)
    private Collection ordemServicoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “fkProdutor”)
    private Collection criacaoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “fkProdutor”)
    private Collection partoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “fkProdutor”)
    private Collection inseminacaoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “fkProdutor”)
    private Collection possuiMedicamentoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = “fkProdutor”)
    private Collection propriedadeCollection;

    public Produtor() {
    }

    public Produtor(Integer idProdutor) {
    this.idProdutor = idProdutor;
    }

    public Produtor(Integer idProdutor, String cpfProdutor) {
    this.idProdutor = idProdutor;
    this.cpfProdutor = cpfProdutor;
    }

    public Integer getIdProdutor() {
    return idProdutor;
    }

    public void setIdProdutor(Integer idProdutor) {
    this.idProdutor = idProdutor;
    }

    public String getCpfProdutor() {
    return cpfProdutor;
    }

    public void setCpfProdutor(String cpfProdutor) {
    this.cpfProdutor = cpfProdutor;
    }

    public String getNomeProdutor() {
    return nomeProdutor;
    }

    public void setNomeProdutor(String nomeProdutor) {
    this.nomeProdutor = nomeProdutor;
    }

    public String getEdnProdutor() {
    return ednProdutor;
    }

    public void setEdnProdutor(String ednProdutor) {
    this.ednProdutor = ednProdutor;
    }

    public String getCidadeProdutor() {
    return cidadeProdutor;
    }

    public void setCidadeProdutor(String cidadeProdutor) {
    this.cidadeProdutor = cidadeProdutor;
    }

    public String getUfProdutor() {
    return ufProdutor;
    }

    public void setUfProdutor(String ufProdutor) {
    this.ufProdutor = ufProdutor;
    }

    public Integer getFoneProdutor() {
    return foneProdutor;
    }

    public void setFoneProdutor(Integer foneProdutor) {
    this.foneProdutor = foneProdutor;
    }

    public Date getDataRegProdutor() {
    return dataRegProdutor;
    }

    public void setDataRegProdutor(Date dataRegProdutor) {
    this.dataRegProdutor = dataRegProdutor;
    }

    public Collection getOrdemServicoCollection() {
    return ordemServicoCollection;
    }

    public void setOrdemServicoCollection(Collection ordemServicoCollection) {
    this.ordemServicoCollection = ordemServicoCollection;
    }

    public Collection getCriacaoCollection() {
    return criacaoCollection;
    }

    public void setCriacaoCollection(Collection criacaoCollection) {
    this.criacaoCollection = criacaoCollection;
    }

    public Collection getPartoCollection() {
    return partoCollection;
    }

    public void setPartoCollection(Collection partoCollection) {
    this.partoCollection = partoCollection;
    }

    public Collection getInseminacaoCollection() {
    return inseminacaoCollection;
    }

    public void setInseminacaoCollection(Collection inseminacaoCollection) {
    this.inseminacaoCollection = inseminacaoCollection;
    }

    public Collection getPossuiMedicamentoCollection() {
    return possuiMedicamentoCollection;
    }

    public void setPossuiMedicamentoCollection(Collection possuiMedicamentoCollection) {
    this.possuiMedicamentoCollection = possuiMedicamentoCollection;
    }

    public Collection getPropriedadeCollection() {
    return propriedadeCollection;
    }

    public void setPropriedadeCollection(Collection propriedadeCollection) {
    this.propriedadeCollection = propriedadeCollection;
    }

    @Override
    public int hashCode() {
    int hash = 0;
    hash += (idProdutor != null ? idProdutor.hashCode() : 0);
    return hash;
    }

    @Override
    public boolean equals(Object object) {
    // TODO: Warning - this method won’t work in the case the id fields are not set
    if (!(object instanceof Produtor)) {
    return false;
    }
    Produtor other = (Produtor) object;
    if ((this.idProdutor == null && other.idProdutor != null) || (this.idProdutor != null && !this.idProdutor.equals(other.idProdutor))) {
    return false;
    }
    return true;
    }

    @Override
    public String toString() {
    return “gestao.entity.Produtor[idProdutor=” + idProdutor + “]”;
    }

}
[/code]

Classe ProdutorController

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package gestao.veterinaria.controller;

import gestao.entity.Produtor;
import gestao.session.ProdutorFacadeLocal;
import java.util.ArrayList;
import javax.ejb.EJB;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.swing.JOptionPane;
import java.util.List;
import javax.faces.model.SelectItem;

/**
*

  • @author arimateia
    */
    public class ProdutorController implements Controller{

    @EJB
    private ProdutorFacadeLocal facade;
    private Produtor produtor;

    private DataModel model;

    /**

    • @return the produtor
      */
      public Produtor getProdutor() {
      return produtor;
      }

    /**

    • @param produtor the produtor to set
      */
      public void setProdutor(Produtor produtor) {
      this.produtor = produtor;
      }

    public String novo(){

     this.setProdutor(new Produtor());
    
     return "novoProdutor";
    

    }

    public DataModel getTodos() throws Exception{

     model = new ListDataModel(getFacade().findAll());
    
     return model;
    

    }

    public List getProdutores(){

     return getFacade().findAll();
    

    }

    public String editar() {
    produtor = getProdutorFromEditOrDelete();

     setProdutor(produtor);
    
     return "editar";
    

    }

    public String excluir() throws Exception {
    produtor = getProdutorFromEditOrDelete();

     int i = JOptionPane.showConfirmDialog(null, "Deja realmente excluir o produtor: " + produtor.getNomeProdutor(),
             "Excluir Raça", JOptionPane.YES_NO_OPTION);
    
     if(i == JOptionPane.YES_NO_OPTION)
         getFacade().remove(produtor);
     else
         return "sucesso";
    
     return "sucesso";
    

    }

    public Produtor getProdutorFromEditOrDelete() {
    produtor = (Produtor)model.getRowData();
    return produtor;

    }

    public String salvar() throws Exception {

     if(produtor.getIdProdutor()==null)
         getFacade().create(produtor);
     else
         getFacade().edit(produtor);
    
     return "sucesso";
    

    }

    /**

    • @return the facade
      */
      public ProdutorFacadeLocal getFacade() {
      return facade;
      }

    /**

    • @param facade the facade to set
      */
      public void setFacade(ProdutorFacadeLocal facade) {
      this.facade = facade;
      }

}
[/code]

Classe PropriedadeController

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package gestao.veterinaria.controller;

import gestao.entity.Produtor;
import gestao.entity.Propriedade;
import gestao.session.ProdutorFacadeLocal;
import gestao.session.PropriedadeFacadeLocal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.swing.JOptionPane;

/**
*

  • @author arimateia
    */
    public class PropriedadeController implements Controller{

    @EJB
    private PropriedadeFacadeLocal facade;
    private Propriedade propriedade;

    private DataModel model;

    @EJB
    private ProdutorFacadeLocal facadeProdutor;
    private Map<String, Object> listaProdutores = null;
    private Produtor p = null;

    public String novo() {
    this.setPropriedade(new Propriedade());

     return "novoPropriedade";
    

    }

    public DataModel getTodos() throws Exception {

     model = new ListDataModel(facade.findAll());
    
     return model;
    

    }

    public Propriedade getPropriedadeFromEditOrDelete(){

     propriedade = (Propriedade)model.getRowData();
    
     return propriedade;
    

    }

    public String editar() {

     propriedade = getPropriedadeFromEditOrDelete();
    
     return "editar";
    

    }

    public String excluir() throws Exception {
    propriedade = getPropriedadeFromEditOrDelete();

     int i = JOptionPane.showConfirmDialog(null, "Deja realmente excluir o produtor: " + propriedade.getNomePropriedade(),
             "Excluir Raça", JOptionPane.YES_NO_OPTION);
    
     if(i == JOptionPane.YES_NO_OPTION)
         facade.remove(propriedade);
     else
         return "sucesso";
    
     return "sucesso";
    

    }

    public String salvar() throws Exception {

     if(propriedade.getIdPropriedade() ==null)
         facade.create(propriedade);
     else
         facade.edit(propriedade);
    
     return "sucesso";
    

    }

    /**

    • @return the proriedade
      */
      public Propriedade getPropriedade() {
      return propriedade;
      }

    /**

    • @param proriedade the proriedade to set
      */
      public void setPropriedade(Propriedade propriedade) {
      this.propriedade = propriedade;
      }

    //retorna uma lista para o SelectItem
    public Map<String, Object> getListaProdutores(){

     listaProdutores = new LinkedHashMap<String, Object>();
     for(Iterator<?> iter = facadeProdutor.findAll().iterator(); iter.hasNext();){
    
         p = (Produtor)iter.next();
    
         
         listaProdutores.put(p.getIdProdutor().toString(), p.getIdProdutor());
     }
    
     return listaProdutores;
    

    }

    public List getListaProdutor(){
    List result = new ArrayList();
    List produtores = facadeProdutor.findAll();
    for(Produtor pr : produtores){
    result.add(new SelectItem(pr.getIdProdutor(), pr.getIdProdutor().toString()));
    }

     return result;
    

    }

}
[/code]

Formulario

<h:inputText value="#{propriedadeC.propriedade.fkProdutor}" id="fkProdutor" size="40" required="true" requiredMessage="CPF campo origatório" converter="converterProdutor" />