Converter JSF TopLink

0 respostas
felipearimateia

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.

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;
        }


    }

}

Classe produtor

/*
 * 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<OrdemServico> ordemServicoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkProdutor")
    private Collection<Criacao> criacaoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkProdutor")
    private Collection<Parto> partoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkProdutor")
    private Collection<Inseminacao> inseminacaoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkProdutor")
    private Collection<PossuiMedicamento> possuiMedicamentoCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkProdutor")
    private Collection<Propriedade> 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<OrdemServico> getOrdemServicoCollection() {
        return ordemServicoCollection;
    }

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

    public Collection<Criacao> getCriacaoCollection() {
        return criacaoCollection;
    }

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

    public Collection<Parto> getPartoCollection() {
        return partoCollection;
    }

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

    public Collection<Inseminacao> getInseminacaoCollection() {
        return inseminacaoCollection;
    }

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

    public Collection<PossuiMedicamento> getPossuiMedicamentoCollection() {
        return possuiMedicamentoCollection;
    }

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

    public Collection<Propriedade> getPropriedadeCollection() {
        return propriedadeCollection;
    }

    public void setPropriedadeCollection(Collection<Propriedade> 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 + "]";
    }

}

Classe ProdutorController

/*
 * 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;
    }

}

Classe PropriedadeController

/*
 * 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<SelectItem> getListaProdutor(){
        List<SelectItem> result = new ArrayList<SelectItem>();
        List<Produtor> produtores = facadeProdutor.findAll();
        for(Produtor pr : produtores){
            result.add(new SelectItem(pr.getIdProdutor(), pr.getIdProdutor().toString()));
        }

        return result;
    }


    

}

Formulario

<h:inputText value="#{propriedadeC.propriedade.fkProdutor}" id="fkProdutor"
                    size="40" required="true" requiredMessage="CPF campo origatório" converter="converterProdutor" />
Criado 16 de março de 2009
Respostas 0
Participantes 1