Problema com selectOneMenu

2 respostas
magnomax

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>

minha entidade

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
/*
 * 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");
        }
    }
}
ClienteController.java
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();
        }
    }

2 Respostas

magnomax

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

muito grato

magnomax

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

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<Cidade> cidades;

    public void setCidades(List<Cidade> 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<Cliente> listaTodosClientes() {
        boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
        if (hasTransaction == false) {
            DaoFactory.getInstance().beginTransaction();
        }
        return DaoFactory.getInstance().getClienteDao().listAll();
    }

    public List<Cliente> 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<SelectItem> getListaCidades() {
        boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
        if (hasTransaction == false) {
            DaoFactory.getInstance().beginTransaction();
        }
        ArrayList<SelectItem> todasCidades = new ArrayList<SelectItem>();
        List<Cidade> cidadess = (List<Cidade>) DaoFactory.getInstance().getCidadeDao().listAll();
        for (Cidade record : cidadess) {
            SelectItem item = new SelectItem(record.getIdcidade(), record.getCidade());
            todasCidades.add(item);
        }
        return todasCidades;

    }

    public List<Cidade> getCidades() {
        boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
        if (hasTransaction == false) {
            DaoFactory.getInstance().beginTransaction();
        }
        cidades = (List<Cidade>) 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";
    }
}
Criado 12 de dezembro de 2010
Ultima resposta 13 de dez. de 2010
Respostas 2
Participantes 1