[RESOLVIDO] PrimeFace + selectOneMenu selecionar o valor buscado no banco

Ola, estou utilizando o primeface e possuo uma tabela que tem um botao “Editar”, que preenche todos os campos com os dados do objeto selecionado e apenas o selectOneMenu nao muda o valor … como fazer para setar esse valor?

								<p:selectOneMenu value="#{mbCarro.idMarca}">
									<f:selectItem itemLabel="--- Selecione ---" itemValue="0" />
									<f:selectItems value="#{mbCarroMarca.listaCarroMarca}" var="a"
										itemLabel="#{a.nome}" itemValue="#{a.id}" />
								</p:selectOneMenu>

Tente utilizar como item value o próprio objeto!

<p:selectOneMenu value="#{mbCarro.idMarca}">  
    <f:selectItem itemLabel="--- Selecione ---" itemValue="0" />  
    <f:selectItems value="#{mbCarroMarca.listaCarroMarca}" var="a"  
        itemLabel="#{a.nome}" itemValue="#{a}" />  
</p:selectOneMenu>

[quote=gilvanandre]Tente utilizar como item value o próprio objeto!

<p:selectOneMenu value="#{mbCarro.idMarca}"> <f:selectItem itemLabel="--- Selecione ---" itemValue="0" /> <f:selectItems value="#{mbCarroMarca.listaCarroMarca}" var="a" itemLabel="#{a.nome}" itemValue="#{a}" /> </p:selectOneMenu> [/quote]

Eu tentei utilizar dessa forma, porem… da erro ao converter… desse jeito que vc passo nao precisa de um conversor?
Até gostaria q fosse dessa forma…

MAIS O MEU PROBLEMA A PRINCIPIO É OUTRO… quero que apareça selecionado no drop assim que eu carrego o meu objeto do banco… ex… nos campos de txt…
aparece os dados corretamentes buscado do banco… so o do drop que nao é atualizado.

o esquema do drop eh o mesmo… so mudei pro drop do estado pq é mais simples de todos…

ae da o erro …

Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt49:j_idt53[severity=(ERROR 2), summary=(Erro de conversão ao definir o valor 'Rondonia' para 'null Converter'. ), detail=(Erro de conversão ao definir o valor 'Rondonia' para 'null Converter'. )]

drop

<p:selectOneMenu value="#{mbCidade.estado}">
									<f:selectItem itemLabel="--- Selecione ---" itemValue="0" />
									<f:selectItems value="#{mbEstado.listaEstado}" var="a"
										itemLabel="#{a.nome}" itemValue="#{a}" />
								</p:selectOneMenu>

Sim… nesse caso você vai ter que utilizar um conversor!
Mas é bem tranquilo de criar ele!

teu <p:selectOneMenu> vai ficar mais ou menos assim o:

                                <p:selectOneMenu converter="converteGrupoProduto" 
                                                 style="width: 230px"
                                                 id="pnomesob"
                                                 value="#{produtoVariavelMB.grupo}">
                                    <f:selectItem itemLabel="Selecione" itemValue=""/>   
                                    <f:selectItems value="#{produtoVariavelMB.listaGrupo}" var="a"
                                                   itemLabel="#{a.nome}" itemValue="#{a}"/>
                                </p:selectOneMenu>

O conversor tem que ficar mais ou menos assim…

package conversor;

import modelo.GrupoProdutos;
import negocio.GrupoProdutosJpaController;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "converteGrupoProduto", forClass = GrupoProdutos.class)
public class ConverteGrupoProduto implements Converter {

    GrupoProdutosJpaController jpa = new GrupoProdutosJpaController();

    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        try {
            return jpa.findGrupoProdutos(Integer.valueOf(arg2).longValue());
        } catch (NumberFormatException e) {
            return new GrupoProdutos();
        }
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        try {
            return String.valueOf(((GrupoProdutos) arg2).getCodigo_grupoProduto());
        } catch (Exception e) {
            return "";
        }
    }
}

Nunca usei de outra maneira!

[quote=gilvanandre]Sim… nesse caso você vai ter que utilizar um conversor!
Mas é bem tranquilo de criar ele!


Nunca usei de outra maneira![/quote]

pode postar a tua classe GrupoProdutosJpaController ?

Claro que sim!

package negocio;

import modelo.Estabelecimento;
import modelo.GrupoProdutos;
import negocio.exceptions.NonexistentEntityException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;

/**
 *
 * @author Gilvan
 */
public class GrupoProdutosJpaController {

    public GrupoProdutosJpaController() {
        emf = HibernateUtil.getEmf();
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(GrupoProdutos grupoProdutos) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(grupoProdutos);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(GrupoProdutos grupoProdutos) throws NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            grupoProdutos = em.merge(grupoProdutos);
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Long id = grupoProdutos.getCodigo_grupoProduto();
                if (findGrupoProdutos(id) == null) {
                    throw new NonexistentEntityException("The grupoProdutos with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Long id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            GrupoProdutos grupoProdutos;
            try {
                grupoProdutos = em.getReference(GrupoProdutos.class, id);
                grupoProdutos.getCodigo_grupoProduto();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The grupoProdutos with id " + id + " no longer exists.", enfe);
            }
            em.remove(grupoProdutos);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<GrupoProdutos> findGrupoProdutosEntities() {
        return findGrupoProdutosEntities(true, -1, -1);
    }

    public List<GrupoProdutos> findGrupoProdutosEntities(int maxResults, int firstResult) {
        return findGrupoProdutosEntities(false, maxResults, firstResult);
    }

    private List<GrupoProdutos> findGrupoProdutosEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from GrupoProdutos as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public GrupoProdutos findGrupoProdutos(Long id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(GrupoProdutos.class, id);
        } finally {
            em.close();
        }
    }

    public int getGrupoProdutosCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from GrupoProdutos as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
}

hummmm o seu converter acaba buscando o objeto no banco pelo Id…

… agora deixa eu te pergunta…
um exemplo…

Estado: Paraná
Cidade: Londrina

Ae vc vai editar uma cidade.
dai vc escohe a cidade de Londrina… ae na tela vc tem um selectOneMenu com todos os estados relacionados.

quando voce escolheu a cidade que qr alterar, no campo “Cidade:” vai ficar preenchido o texto “Londrina” e o selectOneMenu teria que ser alterado para o valor “Paraná”

o q eu quero saber e como alterar esse valor para “Paraná”.

você tem que utilizar um <p:ajax>
Por exemplo… usando o estilo de grupo e subgrupo

                                <h:outputLabel value="Grupo"/>
                                <p:selectOneMenu converter="converteGrupoProduto" 
                                                 style="width: 230px"
                                                 id="pnomesob"
                                                 value="#{produtoVariavelMB.grupo}">
                                    <f:selectItem itemLabel="Selecione" itemValue=""/>   
                                    <f:selectItems value="#{produtoVariavelMB.listaGrupo}" var="a"
                                                   itemLabel="#{a.nome}" itemValue="#{a}"/>

                                    <p:ajax listener="#{produtoVariavelMB.refreshSubGrupo}"
                                            update="subgrupo"/>

                                </p:selectOneMenu>

No meu caso… o <p:ajax> é responsável por buscar todos os subgrupos daquele grupo!
a propriedade listener é responsável por fazer a busca no momento que troca o grupo… e, por fim, basta atualizar o campo do subgrupo utilizando a propriedade update também localizada no <p:ajax>
responsável por atualizar o campo que você quiser

                                <h:outputLabel value="Sub Grupo"/>
                                <p:selectOneMenu converter="converteSubGrupoProduto" 
                                                 style="width: 230px"
                                                 value="#{produtoVariavelMB.subGrupo}"
                                                 id="subgrupo">
                                    <f:selectItem itemLabel="Selecione" itemValue=""/>
                                    <f:selectItems value="#{produtoVariavelMB.listaSubGrupo}" var="a"
                                                   itemLabel="#{a.nome}" itemValue="#{a}"/>
                                </p:selectOneMenu>                               

Não sei se conseguiu me entender?

Vlw

cara… isso ae nao é o meu problema…

eu tirei um print da minha app…

ta…
Quando eu clico em Detalhes na minha tabela, eu preencho os campos abaixo de acordo com a linha do botao selecionado.
ae o que eu nao to conseguindo, é alterar o valor do drop. O valor do campo é preenchido corretamente.

Mas ele está populando o drop?
Tipo… está aparecendo os dados que você quer no drop?
Ou ele vem vazio?

[quote=gilvanandre]Mas ele está populando o drop?
Tipo… está aparecendo os dados que você quer no drop?
Ou ele vem vazio?[/quote]

Eu trago a lista de todos os estados, pq caso o usuario tenha selecionado o estado errado eu tenho que ter disponivel pra ele selecionar… mais quero q qndo clicar no botao preencha os dados corretos ae ele altera do jeito q ele quizer.

ex… salvo como Parana tivesse uma cidade chamado São Paulo.

ae ele quer edita… ae ele altera o estado selecionado.

Posta teu código pra mim! Do teu xhtml!

[quote=gilvanandre][quote]
Eu trago a lista de todos os estados, pq caso o usuario tenha selecionado o estado errado eu tenho que ter disponivel pra ele selecionar… mais quero q qndo clicar no botao preencha os dados corretos ae ele altera do jeito q ele quizer.

ex… salvo como Parana tivesse uma cidade chamado São Paulo.

ae ele quer edita… ae ele altera o estado selecionado.

[/quote]

Posta teu código pra mim! Do teu xhtml![/quote]

Ok… a ideia seria editar um subgrupo e atualizar o drop com todos os valores cadastrado no banco de dados e com o valor selecionado sendo o objeto subgrupo.grupo selecionado.

estou saindo do trabalho assim que eu chegar em casa eu posto o codigo.

[quote=Guguuu][quote=gilvanandre][quote]
Eu trago a lista de todos os estados, pq caso o usuario tenha selecionado o estado errado eu tenho que ter disponivel pra ele selecionar… mais quero q qndo clicar no botao preencha os dados corretos ae ele altera do jeito q ele quizer.

ex… salvo como Parana tivesse uma cidade chamado São Paulo.

ae ele quer edita… ae ele altera o estado selecionado.

[/quote]

Posta teu código pra mim! Do teu xhtml![/quote]

Ok… a ideia seria editar um subgrupo e atualizar o drop com todos os valores cadastrado no banco de dados e com o valor selecionado sendo o objeto subgrupo.grupo selecionado.

estou saindo do trabalho assim que eu chegar em casa eu posto o codigo.[/quote]

Quem me derra sair do trabalho as 15 horas! heuheuheuheuh
Blza… quando puder posta o código ai!

ahuahauuhahahuauhah
eu moro em Rondonia, aki o fuso horario é 1 hora a menos… ou seja sair as 14hrs. Porém meu horario é até as 13:30 direto sem almoço. Então ainda fiz 30 min de hora extra na sexta feira… é puxado… kkkkkkkkkkkkkkk :smiley:

editaCidade.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>

</h:head>

<h:body>
	<div id="Conteudo">
		<h:panelGrid>
			<h:column>
				<h:form>

					<h:column>
						<p:dataTable align="center" rows="15" styleClass="centro"
							value="#{mbCidade.listaCidade}" var="list" id="tabelaPes"
							width="580px">

							<p:column id="colNomeArea" filterBy="#{list.estado.nome}"
								filterEvent="onkeyup" label="Área">
								<f:facet name="header">
									<h:outputText value="Estado" id="lblColNomeArea" />
								</f:facet>
								<h:outputText value="#{list.estado.nome}" id="txtColNomeArea" />
							</p:column>

							<p:column id="colNome" filterBy="#{list.nome}"
								filterEvent="onkeyup" label="nome">
								<f:facet name="header">
									<h:outputText value="Nome" id="lblColNome" />
								</f:facet>
								<h:outputText value="#{list.nome}" id="lblValorColNome" />
							</p:column>



							<p:column id="colDetalhe" label="detalhe">
								<f:facet name="header">
									<h:outputText value="Detalhes" id="lblColDetalhe" />
								</f:facet>
								<h:inputHidden value="#{list.id}" binding="#{mbCidade.idTabela}"></h:inputHidden>
								<p:commandButton value="Detalhes" ajax="false"
									update="tabelaPes" actionListener="#{mbCidade.atualizaCampos}"></p:commandButton>

							</p:column>

							<p:column id="colDelete" label="Deletar">
								<f:facet name="header">
									<h:outputText value="Deletar" id="lblColDelete" />
								</f:facet>
								<h:inputHidden value="#{list.id}" binding="#{mbCidade.idTabela}"></h:inputHidden>
								<p:commandButton value="Deletar" ajax="false" update="tabelaPes"
									actionListener="#{mbCidade.Deletar}" />

							</p:column>
						</p:dataTable>
					</h:column>

					<br />
					<br />
					<br />
					<p:fieldset legend="Cidade">
						<h:panelGrid id="pgEstoqueCategoria" columns="2">

							<h:outputText value="Estado:"></h:outputText>
							<h:column>
								<p:selectOneMenu value="#{mbCidade.idEstado}">
									<f:selectItem itemLabel="--- Selecione ---" itemValue="0" />
									<f:selectItems value="#{mbEstado.listaEstado}" var="a"
										itemLabel="#{a.nome}" itemValue="#{a.id}" />
								</p:selectOneMenu>
							</h:column>
							<h:outputText value="Cidade:"></h:outputText>
							<h:inputText value="#{mbCidade.cidade.nome}" />
							<h:column></h:column>
							<p:commandButton value="Salvar" ajax="false"
								action="#{mbCidade.Editar}" />
						</h:panelGrid>
					</p:fieldset>
				</h:form>
				<!-- FIM FORM -->
			</h:column>
			<!-- FIM COLUNA GERAL -->
		</h:panelGrid>
		<!-- FIM PAINEL GERAL -->
	</div>
</h:body>
</html>

managerbeam


import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputHidden;

import br.com.Decom.DAO.DAO;
import br.com.Decom.Model.Cidade;
import br.com.Decom.Model.Estado;

@ManagedBean
@SessionScoped
public class mbCidade {

	DAO<Estado> daoEstado = new DAO<Estado>(Estado.class);
	DAO<Cidade> daoCidade = new DAO<Cidade>(Cidade.class);

	HtmlInputHidden idTabela = new HtmlInputHidden();

	List<Cidade> listaCidade = new ArrayList<Cidade>();
	Cidade cidade = new Cidade();
	Estado estado = new Estado();
	Long idEstado;

	public mbCidade() {
		// TODO Auto-generated constructor stub
		listaCidade = daoCidade.buscaLista();
		attLista();
	}

	public String Salvar() {

		//System.out.println("Estado Selecionado: " + estado.getNome());
		//estado = daoEstado.busca(idEstado);
		cidade.setEstado(estado);
		cidade.setStatus(true);
		//daoCidade.salva(cidade);
		daoCidade = new DAO<Cidade>(Cidade.class);
		cidade = new Cidade();
		estado = new Estado();

		attLista();
		return "ok";
	}

	public String Editar() {
		estado = daoEstado.busca(idEstado);
		cidade.setEstado(estado);
		daoCidade.salva(cidade);
		daoCidade = new DAO<Cidade>(Cidade.class);
		cidade = new Cidade();
		estado = new Estado();
		attLista();
		return "ok";
	}

	public String Deletar() {
		atualizaCampos();
		cidade.setStatus(false);
		daoCidade.salva(cidade);
		daoCidade = new DAO<Cidade>(Cidade.class);
		cidade = new Cidade();
		attLista();
		return "ok";
	}

	public String atualizaCampos() {

		cidade = daoCidade.busca(idTabela.getValue().toString());
		return "ok";
	}

	public HtmlInputHidden getIdTabela() {
		return idTabela;
	}

	public void setIdTabela(HtmlInputHidden idTabela) {
		this.idTabela = idTabela;
	}

	public List<Cidade> getListaCidade() {
		return listaCidade;
	}

	public void setListaCidade(List<Cidade> listaCidade) {
		this.listaCidade = listaCidade;
	}

	public void attLista() {
		listaCidade = daoCidade.buscaLista();
	}

	public Long getIdEstado() {
		return idEstado;
	}

	public void setIdEstado(Long idEstado) {
		this.idEstado = idEstado;
	}

	public Cidade getCidade() {
		return cidade;
	}

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

	public Estado getEstado() {
		return estado;
	}

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

	public void attComboCidade() {

		if (idEstado > 0) {

			daoEstado = new DAO<Estado>(Estado.class);
			listaCidade = new ArrayList<Cidade>();
			estado = daoEstado.busca(idEstado);
			listaCidade = estado.getCidades();
		}

	}
	
}

alguem?

galera como vcs fazem o editar de vcs? vcs nao atualiza o drop?

bom…dei uma lida por ae… ae dizem que se tiver o converter funcionando direitinho…
se na lista apresentada do selectonemenu, conter o valor que esta no “value” … o
selectonemenu aparece o valor do value selecionado…

entao quiz fazer o converter… logo vou cola as classes…

editaCidade.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>

</h:head>

<h:body>
	<div id="Conteudo">
		<h:panelGrid>
			<h:column>
				<h:form>

					<h:column>
						<p:dataTable align="center" rows="15" styleClass="centro"
							value="#{mbCidade.listaCidade}" var="list" id="tabelaPesCidade"
							width="580px">

							<p:column id="colNomeEstado" filterBy="#{list.estado.nome}"
								filterEvent="onkeyup" label="Estado">
								<f:facet name="header">
									<h:outputText value="Estado" id="lblColNomeArea" />
								</f:facet>
								<h:outputText value="#{list.estado.nome}" id="txtColNomeEstado" />
							</p:column>

							<p:column id="colNome" filterBy="#{list.nome}"
								filterEvent="onkeyup" label="nome">
								<f:facet name="header">
									<h:outputText value="Nome" id="lblColNome" />
								</f:facet>
								<h:outputText value="#{list.nome}" id="lblValorColNome" />
							</p:column>



							<p:column id="colDetalhe" label="detalhe">
								<f:facet name="header">
									<h:outputText value="Detalhes" id="lblColDetalhe" />
								</f:facet>
								<h:inputHidden value="#{list.id}" binding="#{mbCidade.idTabela}"></h:inputHidden>
								<p:commandButton value="Detalhes" ajax="false"
									actionListener="#{mbCidade.atualizaCampos}"></p:commandButton>

							</p:column>

							<p:column id="colDelete" label="Deletar">
								<f:facet name="header">
									<h:outputText value="Deletar" id="lblColDelete" />
								</f:facet>
								<h:inputHidden value="#{list.id}" binding="#{mbCidade.idTabela}"></h:inputHidden>
								<p:commandButton value="Deletar" ajax="false"
									actionListener="#{mbCidade.Deletar}" />

							</p:column>
						</p:dataTable>
					</h:column>

					<br />
					<br />
					<br />
					<p:fieldset legend="Cidade">
						<h:panelGrid id="pgEstoqueCategoria" columns="2">

							<h:outputText value="Estado:"></h:outputText>
							<p:selectOneMenu id="dropEstado"
								value="#{mbCidade.estado}"
								converter="converteGrupoProduto">
								<f:selectItems value="#{mbEstado.listaEstado}" var="a"
									itemLabel="#{a.nome}" itemValue="#{a}" />
							</p:selectOneMenu>
							<h:outputText value="Cidade:"></h:outputText>
							<h:inputText id="inputCidadeNome" value="#{mbCidade.cidade.nome}" />
							<h:column></h:column>
							<p:commandButton value="Salvar" ajax="true"
								action="#{mbCidade.Editar}" update="tabelaPesCidade" />
						</h:panelGrid>
					</p:fieldset>
				</h:form>
				<!-- FIM FORM -->
			</h:column>
			<!-- FIM COLUNA GERAL -->
		</h:panelGrid>
		<!-- FIM PAINEL GERAL -->
	</div>
</h:body>
</html>

convert ( a principio so alterei algumas coisas do seu)

package br.com.Decom.Util;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import br.com.Decom.DAO.DAO;
import br.com.Decom.Model.Estado;

@FacesConverter(value = "converteGrupoProduto", forClass = Estado.class)
public class ConverteGrupoProduto implements Converter {

	
	DAO<Estado> dao = new DAO<Estado>(Estado.class);
	Estado estado = new Estado();
	
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		try {
			
			estado = dao.busca(arg2);
			if(!arg2.isEmpty())
			System.out.println("AAA TESTE AAA : " + estado.getSigla() );

			return estado;
		} catch (NumberFormatException e) {
			return new Estado();
		}
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		try {
			return String.valueOf(((Estado) arg2).getId());
		} catch (Exception e) {
			return "";
		}
	}
}

mbCidade.java (meu controller)

package br.com.Decom.ManergerBeam;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputHidden;

import br.com.Decom.DAO.DAO;
import br.com.Decom.Model.Cidade;
import br.com.Decom.Model.Estado;

@ManagedBean
@SessionScoped
public class mbCidade {

	DAO<Estado> daoEstado = new DAO<Estado>(Estado.class);
	DAO<Cidade> daoCidade = new DAO<Cidade>(Cidade.class);

	HtmlInputHidden idTabela = new HtmlInputHidden();

	List<Cidade> listaCidade = new ArrayList<Cidade>();
	Cidade cidade = new Cidade();
	Estado estado = new Estado();
	Long idEstado;

	public mbCidade() {
		// TODO Auto-generated constructor stub
		listaCidade = daoCidade.buscaLista();
		
		attLista();
	}

	public String Salvar() {

		//System.out.println("Estado Selecionado: " + estado.getNome());
		//estado = daoEstado.busca(idEstado);
		cidade.setEstado(estado);
		cidade.setStatus(true);
		//daoCidade.salva(cidade);
		daoCidade = new DAO<Cidade>(Cidade.class);
		cidade = new Cidade();
		estado = new Estado();

		attLista();
		return "ok";
	}

	public String Editar() {
		estado = daoEstado.busca(idEstado);
		cidade.setEstado(estado);
		daoCidade.salva(cidade);
		daoCidade = new DAO<Cidade>(Cidade.class);
		cidade = new Cidade();
		estado = new Estado();
		attLista();
		return "ok";
	}

	public String Deletar() {
		atualizaCampos();
		cidade.setStatus(false);
		daoCidade.salva(cidade);
		daoCidade = new DAO<Cidade>(Cidade.class);
		cidade = new Cidade();
		attLista();
		return "ok";
	}

	public String atualizaCampos() {

		cidade = daoCidade.busca(idTabela.getValue().toString());
		estado = cidade.getEstado();
		System.out.println("Estado: " + estado.getNome());
		return "ok";
	}

	public HtmlInputHidden getIdTabela() {
		return idTabela;
	}

	public void setIdTabela(HtmlInputHidden idTabela) {
		this.idTabela = idTabela;
	}

	public List<Cidade> getListaCidade() {
		return listaCidade;
	}

	public void setListaCidade(List<Cidade> listaCidade) {
		this.listaCidade = listaCidade;
	}

	public void attLista() {
		listaCidade = daoCidade.buscaLista();
	}

	public Long getIdEstado() {
		return idEstado;
	}

	public void setIdEstado(Long idEstado) {
		this.idEstado = idEstado;
	}

	public Cidade getCidade() {
		return cidade;
	}

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

	public Estado getEstado() {
		return estado;
	}

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

	public void attComboCidade() {

		if (idEstado > 0) {

			daoEstado = new DAO<Estado>(Estado.class);
			listaCidade = new ArrayList<Cidade>();
			estado = daoEstado.busca(idEstado);
			listaCidade = estado.getCidades();
		}

	}
	
}

o erro que apresenta


Informações: Server startup in 7894 ms
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
AAA TESTE AAA : RO
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]
Set 18, 2012 1:17:33 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
Informações: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt11:j_idt20:dropEstado[severity=(ERROR 2), summary=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido), detail=(j_idt11:j_idt20:dropEstado: Erro de validação: o valor não é válido)]

Bom… até que fim consegui…para os que tiverem o mesmo problema…

O meu problema era mostrar na lista do drop o valor que foi buscado do banco para editar ele.

para isso é necessario o conversor (Converter) pois o valor que estiver no “value” e estiver na lista, o drop vai apresentar como selecionado.

no poste que tem o erro tem todas as classes envolvidas… o erro era o meu hashCode, equals e toString.

o hash e o equals… tem uma opção no eclipse q gera automatico ae eu selecionei todas as variaveis menos as de lista.

e criei o toString retornando os nomes.

Desculpem reabrir mas estou com um problema semelhante, na verdade já passei por isso, mas verifiquei tudo e não consegui achar o problema.

Tenho isso:

[code]<p:selectOneMenu id=“campoEstado”
value="#{motoristaMB.motorista.endereco.estado}"
valueChangeListener="#{motoristaMB.estadoChangeListener}"
required=“true” effect=“fade” filter=“true”
filterMatchMode=“startsWith”
label="#{msg[‘label.endereco.estado’]}"
style=“float: left; width: 80px;”>

<f:selectItem itemLabel="" itemValue="#{null}"
	noSelectionOption="true" />

<f:selectItems value="#{estadoMB.estados}" var="estado"
	itemLabel="#{estado.uf}" itemValue="#{estado}"  />

<f:converter binding="#{UFConverter}" />

<p:ajax event="change"
	listener="#{motoristaMB.loadCidadesByUf}" render="campoCidade"
	update="campoCidade" process="@this" />

</p:selectOneMenu>
[/code]Onde:
motoristaMB.motorista.endereco.estado = “SP”
Porém ele [color=red]não seleciona o item na lista de jeito nenhum no momento do carregamento[/color], tenho também uma lista de cidades que pertence ao estado e ele seleciona normalmente.

Meu converter está assim:

[code]public class UFConverter implements Converter {

@Inject
private EstadoMB estadoMB;

public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
	if (value == null || value.isEmpty()) {
		return null;
	}

	try {
		String UF = value;
		Estado estado = estadoMB.getEstadoPorUF(UF);
		return estado;
	} catch (Exception e) {
		e.printStackTrace();
		throw new ConverterException(new FacesMessage(String.format("Nao pode converter %s para Estado", value)), e);
	}
}

public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {
	if (value instanceof Estado) {
		Estado obj = (Estado) value;
		return obj.toString();
	} else {
		return "";
	}
}

}[/code]

E o método .toString() do objeto Estado retorna a UF, ex: SP

No atributo estado do endereço que está no value também já conferi e está vindo a string “SP”, porque será que não seleciona automaticamente?