[Resolvido]Como pegar objeto do componente selectOneMenu do PrimeFaces 3

Estou tentando pegar o objeto selecionado no meu selectOneMenu porém não estou conseguindo estou me baseando nesse tutorial
http://cagataycivici.wordpress.com/2011/02/22/primefaces-selectonemenu/
meu .xhtml está assim

... <p:selectOneMenu effect="drop" > <f:selectItems value="#{profissaoController.arrayListaProfissoes()}" var="prof" itemLabel="#{prof.profissao}" itemValue="#{prof.id}"/> </p:selectOneMenu> ...

dessa forma lista beleza sem dar erros porém quando tento fazer assim

... <p:selectOneMenu effect="drop" value="#{pessoaController.pessoa.idProfissao}" converter="Profissao"> <f:selectItems value="#{profissaoController.arrayListaProfissoes()}" var="prof" itemLabel="#{prof.profissao}" itemValue="#{prof.id}"/> </p:selectOneMenu> ...

o seguinte erro aparece

[code]HTTP Status 500
exception

javax.servlet.ServletException: Erro de expressão: Objeto denominado: Profissao não encontrado.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)…[/code]

Já tentei algumas alterações e combinações no código acima porém sem sucesso, também vi em outro post que só tem jeito de pegar tipos String ou int do ‘selectOneMenu’ isso é verdade?
Quero saber alguma forma de pegar esse dado selecionado para gravar no banco e também para seleciona-lo novamente ao clicar em alterar, alguém tem alguma solução?

agradeço por qualquer ajuda, flw!!

tenho um exemplo direto com jsf2, ai não precisa ficar fazendo os converter…

             <h:selectOneMenu id="aplicativo" value="#{mb.objeto}" valueChangeListener="#{mb.changeObj}" 
	                             	immediate="true" >
			<f:selectItems value="#{mb.listaObjs}"	var="obj" itemLabel="#{obj.nome}"	itemValue="#{obj}" />
             </h:selectOneMenu>

v se ajuda ai

[]´s

cria um atributo no pessoaController para representar a profissao selecionada… exemplo… selectedProfissao… com seu respectivo get/set

aí no código fica

<p:selectOneMenu effect="drop" value="#{pessoaController.selectedProfissao}" converter="Profissao"> 

[quote=fdcarli]tenho um exemplo direto com jsf2, ai não precisa ficar fazendo os converter…

             <h:selectOneMenu id="aplicativo" value="#{mb.objeto}" valueChangeListener="#{mb.changeObj}" 
	                             	immediate="true" >
			<f:selectItems value="#{mb.listaObjs}"	var="obj" itemLabel="#{obj.nome}"	itemValue="#{obj}" />
             </h:selectOneMenu>

v se ajuda ai
[]´s[/quote]

Tentei dessa forma até que mostrou na tela tudo beleza porém não consigo salvar nem alterar ao tentar faze-lo me aparece uma mensagem com "Erro de conversão ao definir o valor ‘1’ para ‘null Converter’. "


[quote=paulovloghan]cria um atributo no pessoaController para representar a profissao selecionada… exemplo… selectedProfissao… com seu respectivo get/set

aí no código fica

<p:selectOneMenu effect="drop" value="#{pessoaController.selectedProfissao}" converter="Profissao"> [/quote]

também tentei dessa forma e o mesmo erro ocorre quando tiro o converter ele também aparece beleza só que não consigo salvar e nem erro aparece


Será que não tem uma forma de no meu ManagedBean no caso meu “pessoaController” eu acessar o meu componente e com isso pegar o que estiver selecionado? Assim quando eu clicar em salvar por exemplo eu vou e pego o que está selecionado no componente no momento.

bom, até então não tem erro… está certo…

posta seu converter aí pra gente dá um olhada…
talvez vc tenha que implementar um cache dentro do converter… pra lhe ajudar…

Como esta sua classe de conversao ?
Ele esta procurando esta classe. Posta a classe pra gente ver.

Acho que é no conversor mesmo, não sei o que tem que fazer nele estava tentando converter no tipo da minha entidade no caso ‘Profissao’ que possui meus atributos e métodos GET e SET, enfim alguém tem algum exemplo ai?

O que exatamente esta tentando fazer, somente carregar os dados em um p:selectOneMenu ?
se for isto, nao precisa de conversão.

Carrega do banco e jogar no selectOneMenu eu consigo agora preciso de saber qual item foi selecionado para guarda-lo na minha variável do mesmo tipo, e também quero por exemplo ao clicar em “alterar” eu selecione o item que está na minha variável no selectOneMenu.

segue um exemplo feito com hibernate

Managed Bean


	public void salvar() {
		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();
		ContatoDAO dao = new ContatoDAO(em);
		DAO<Grupo> grupoDAO = new DAO<Grupo>(em, Grupo.class);
		Grupo grupoSelecionado = grupoDAO.busca(grupoId);
		contato.setGrupo(grupoSelecionado);
		if (contato.getId() == null) {
			dao.adiciona(contato);
		} else {
			dao.altera(contato);
		}
		em.getTransaction().commit();
		this.contatos = dao.listaContatoOrdem();
		em.close();

XHTML

<p:selectOneMenu value="#{contatoMB.contato.grupo.id}">						
						<f:selectItem itemLabel="Escolha o tipo..." itemValue=""
							noSelectionOption="true" />
						<f:selectItems value="#{contatoMB.grupos}" var="c"
							itemLabel="#{c.descricao}" itemValue="#{c.id}" />
					</p:selectOneMenu>

se nao entender, posta sua Managed Bean e seu xhtml aqui, se possivel até o DAO

Sim dessa forma eu consigo gravar no banco tudo beleza, porém para seleciona-la novamente quando clico em ‘alterar’ nada fica selecionado você sabe alguma forma de a faze-la, agradeço pela ajuda ai, vlw!

Coloca sua pagina xhtml e seu MB pra gente ver.
Qual o erro que retorna quando tenta editar ?

Na verdade não retorna erro só que ao editar não seleciona nada na combo tipo o que já estava setado na minha variavel porém os dados permanecem lá dando a possibilidade deu clicar na combo e selecionar o item

Tenta isso ai, só um detalhe, estou usando p:dialog, onde ele retorna populado pelos dados

									<p:commandButton image="ui-icon-search" update="painel"
										ajax="true" immediate="true" oncomplete="janela.show()">
										<f:setPropertyActionListener value="#{motorista}"
											target="#{motoristaMB.motorista}" />
									</p:commandButton>

Não entendi muito bem esse último mas o principal já está fazendo que é listar e salvar o que foi selecionado agradeço atenção e ajuda de todos, flw!!!

[quote=eveban]segue um exemplo feito com hibernate

Managed Bean


	public void salvar() {
		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();
		ContatoDAO dao = new ContatoDAO(em);
		DAO<Grupo> grupoDAO = new DAO<Grupo>(em, Grupo.class);
		Grupo grupoSelecionado = grupoDAO.busca(grupoId);
		contato.setGrupo(grupoSelecionado);
		if (contato.getId() == null) {
			dao.adiciona(contato);
		} else {
			dao.altera(contato);
		}
		em.getTransaction().commit();
		this.contatos = dao.listaContatoOrdem();
		em.close();

XHTML

<p:selectOneMenu value="#{contatoMB.contato.grupo.id}"> <f:selectItem itemLabel="Escolha o tipo..." itemValue="" noSelectionOption="true" /> <f:selectItems value="#{contatoMB.grupos}" var="c" itemLabel="#{c.descricao}" itemValue="#{c.id}" /> </p:selectOneMenu> [/quote]

Eveban, estou tentando fazer a mesma coisa que voce mas estou obtendo o seguinte erro:

INFO: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.
sourceId=j_idt5:cor[severity=(ERROR 2), summary=(j_idt5:cor: ‘br.com.noname.rhodes.entity.Cor@170a6004’ deve ser um número formado por um ou mais dígitos.), detail=(j_idt5:cor: ‘br.com.noname.rhodes.entity.Cor@170a6004’ deve ser um número entre -9223372036854775808 a 9223372036854775807 Exemplo: 98765432)]

Poderia me dar uma luz??? Até lhe adicionei no msn caso seja necessário.

Abraços