Problema com selectOneMenu

depois de nadar e morrer na praia vamos pedindo ajuda…
quero salvar um cliente que tem uma cidade.
o problema é simples eu é q não descobri qual parafuso apertar, a entidade cidade ja tem estado junto, na mesma tabela, coloquei uns println pra ver o q saia no momento em que tentava salvar ou alterar um registro, e o resultado era que não dava erro nenhum, passava pelos métodos do cidadeConverter e nem chega no meu método de salvar os dados. não consegui resolver sozinho por isso peço ajuda dos companheiros aqui do guj

isso está na minha view:

                        <h:selectOneMenu id="cidade" value="#{clienteController.cliente.cidade}" converter="cidadeConverter" >
                            <f:selectItems value="#{clienteController.cidades}" var="cid" itemValue="#{cid}" itemLabel="#{cid.cidade}" />
                        </h:selectOneMenu>[/code]

minha entidade

[code]package entidades;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author Magno Max
 */
@Entity
@Table(name = "cidade")
public class Cidade implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Basic(optional = false)
    private Long idcidade;
    private String cidade;
    private String estado;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cidade", fetch=FetchType.LAZY)
    private List<Cliente> clienteList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cidade", fetch=FetchType.LAZY)
    private List<Livro> livroList;

    public Cidade() {
    }

    public Cidade(Long idcidade) {
        this.idcidade = idcidade;
    }

    public Long getIdcidade() {
        return idcidade;
    }

    public void setIdcidade(Long idcidade) {
        this.idcidade = idcidade;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public List<Cliente> getClienteList() {
        return clienteList;
    }

    public void setClienteList(List<Cliente> clienteList) {
        this.clienteList = clienteList;
    }

    public List<Livro> getLivroList() {
        return livroList;
    }

    public void setLivroList(List<Livro> livroList) {
        this.livroList = livroList;
    }


    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idcidade != null ? idcidade.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 Cidade)) {
            return false;
        }
        Cidade other = (Cidade) object;
        if ((this.idcidade == null && other.idcidade != null) || (this.idcidade != null && !this.idcidade.equals(other.idcidade))) {
            return false;
        }
        return true;
    }




}

cidadeConverter.java

[code]/*

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

import dao.DaoFactory;
import entidades.Cidade;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

/**
*

  • @author seduc
    */
    @FacesConverter(value = “cidadeConverter”, forClass = Cidade.class)
    public class cidadeConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException {
    if (arg2 == null || arg2.length() == 0) {
    return null;
    }
    Long id = new Long(arg2);
    boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
    if (hasTransaction == false) {
    DaoFactory.getInstance().beginTransaction();
    }

         System.out.println("Convertendo a porcaria:"+DaoFactory.getInstance().getCidadeDao().getCidadeByIdcidade(id).getIdcidade());
     return DaoFactory.getInstance().getCidadeDao().getCidadeByIdcidade(id);
    

    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
    if (object == null) {
    return null;
    }
    if (object instanceof Cidade) {
    Cidade o = (Cidade) object;
    System.out.println(“Convertendo a porcaria:”+o.getCidade().toString());
    return o.getIdcidade() == null ? “” : o.getIdcidade().toString();
    } else {
    throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + “; expected type: entidades.Cidade”);
    }
    }
    }
    [/code]

ClienteController.java

[code] public void saveOrUpdate(ActionEvent actionEvent) {
boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
if (hasTransaction == false) {
DaoFactory.getInstance().beginTransaction();
}
if (getCliente() != null) {
System.out.println("Cidade salva: "+ cliente.getCidade().getCidade());
DaoFactory.getInstance().getClienteDao().insertOrUpdate(cliente);
try {
DaoFactory.getInstance().commit();
SessionUtil.addSuccessMessage(“saveSuccess”);
if (isInsert() == true) {
cliente = new Cliente();
}
} catch (Exception e) {
DaoFactory.getInstance().rollBack();
SessionUtil.addErrorMessage(“saveFail”);
} finally {
if (hasTransaction == false) {
DaoFactory.getInstance().close();
}

        }
    } else {
        SessionUtil.addSuccessMessage("objectEmpty");
        cliente = new Cliente();
    }
}

[/code]

pessoal se tiver alguem q consiga me ajudar eu estou precisando de verdade, parei tudo por conta desse problema

muito grato

galera na minha pressa consegui resolver aqui, o problema era no meu dao generico, usei Criteria e resolveu o problema, o codigo acima ta perfeito, se alguem algum dia quiser tomar como referência, abaixo ta o meu bean, pq não achei muita coisa que me ajudou então talvez ajude alguem

abraço

[code]package beans;

import dao.DaoFactory;
import entidades.Cidade;
import entidades.Cliente;
import java.util.ArrayList;
import java.util.List;
//import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.faces.model.DataModel;
import org.hibernate.Session;
import util.HibernateUtil;
import util.SessionUtil;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import org.hibernate.Criteria;
import org.hibernate.criterion.Expression;

/**
*

  • @author Magno Max
    */
    @ManagedBean(name = “clienteController”)
    @SessionScoped
    public class clienteController {

    /** Creates a new instance of clienteController */
    public clienteController() {
    }
    private Cliente cliente = new Cliente();
    private DataModel clientes;
    private String search;
    private boolean insert;
    private List cidades;

    public void setCidades(List cidades) {
    this.cidades = cidades;
    }

    public boolean isInsert() {
    return insert;
    }

    public void setInsert(boolean insert) {
    this.insert = insert;
    }

    public String getSearch() {
    return search;
    }

    public void setSearch(String search) {
    this.search = search;
    }

    public List listaTodosClientes() {
    boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
    if (hasTransaction == false) {
    DaoFactory.getInstance().beginTransaction();
    }
    return DaoFactory.getInstance().getClienteDao().listAll();
    }

    public List pesquisaClientesByNome(String nome) {
    Session session = HibernateUtil.getSession();
    Criteria cFunc = session.createCriteria(Cliente.class);
    cFunc.add(Expression.like(“nome”, “%” + nome + “%”).ignoreCase());
    return cFunc.list();

    }

    public List getListaCidades() {
    boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
    if (hasTransaction == false) {
    DaoFactory.getInstance().beginTransaction();
    }
    ArrayList todasCidades = new ArrayList();
    List cidadess = (List) DaoFactory.getInstance().getCidadeDao().listAll();
    for (Cidade record : cidadess) {
    SelectItem item = new SelectItem(record.getIdcidade(), record.getCidade());
    todasCidades.add(item);
    }
    return todasCidades;

    }

    public List getCidades() {
    boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
    if (hasTransaction == false) {
    DaoFactory.getInstance().beginTransaction();
    }
    cidades = (List) DaoFactory.getInstance().getCidadeDao().listAll();
    return cidades;
    }

    public DataModel getClientes() {
    if (search == null) {
    clientes = new ListDataModel(listaTodosClientes());
    } else {
    clientes = new ListDataModel(pesquisaClientesByNome(search));
    }
    return clientes;
    }

    public void setClientes(DataModel clientes) {
    this.clientes = clientes;
    }

    public Cliente getCliente() {
    return cliente;
    }

    public void setCliente(Cliente cliente) {
    this.cliente = cliente;
    }

    public void prepareInsert(ActionEvent actionEvent) {
    cliente = new Cliente();
    setInsert(true);
    }

    public void prepareEdit(ActionEvent actionEvent) {
    cliente = new Cliente();
    cliente = (Cliente) (getClientes().getRowData());
    setInsert(false);
    }

    public void saveOrUpdate(ActionEvent actionEvent) {
    boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
    if (hasTransaction == false) {
    DaoFactory.getInstance().beginTransaction();
    }
    if (getCliente() != null) {
    System.out.println("Cidade salva: " + cliente.getCidade().getCidade());
    DaoFactory.getInstance().getClienteDao().insertOrUpdate(cliente);
    try {
    DaoFactory.getInstance().commit();
    SessionUtil.addSuccessMessage(“saveSuccess”);
    if (isInsert() == true) {
    cliente = new Cliente();
    }
    } catch (Exception e) {
    DaoFactory.getInstance().rollBack();
    SessionUtil.addErrorMessage(“saveFail”);
    } finally {
    if (hasTransaction == false) {
    DaoFactory.getInstance().close();
    }

         }
     } else {
         SessionUtil.addSuccessMessage("objectEmpty");
         cliente = new Cliente();
     }
    

    }

    public String excluir() {
    Cliente clienteTemp = (Cliente) (clientes.getRowData());

     boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
     if (hasTransaction == false) {
         DaoFactory.getInstance().beginTransaction();
     }
    
     if (getCliente() != null) {
         DaoFactory.getInstance().getClienteDao().delete(clienteTemp);
    
         try {
             DaoFactory.getInstance().commit();
             SessionUtil.addSuccessMessage("saveSuccess");
             cliente = new Cliente();
    
         } catch (Exception e) {
             DaoFactory.getInstance().rollBack();
             SessionUtil.addErrorMessage("saveFail");
         } finally {
             if (hasTransaction == false) {
                 DaoFactory.getInstance().close();
             }
         }
     } else {
         SessionUtil.addSuccessMessage("objectEmpty");
         cliente = new Cliente();
     }
     return "list";
    

    }
    }
    [/code]