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

16 respostas
I
Estou tentando pegar o objeto selecionado no meu selectOneMenu porém não estou conseguindo estou me baseando nesse tutorial [url]http://cagataycivici.wordpress.com/2011/02/22/primefaces-selectonemenu/[/url] 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

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)...

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!!

16 Respostas

F

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

P

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">
I

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

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’. "


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">

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.

P

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…

E

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

I

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?

E

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

I

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.

E

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>
E

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

I

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!

E

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

I

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

E

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>
I

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!!!

R

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>

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

Criado 18 de agosto de 2011
Ultima resposta 26 de set. de 2012
Respostas 16
Participantes 5