Primefaces : SelectOneMenu[RESOLVIDO]

Olá pessoas o/,

Eu estou usando o selectOeMenu do primefaces em uma tela de cadastro. O selectOneMenu carrega os dados que devem aparecer e opção escolhida é armazenada no Banco de dados e tudo mais.
O meu problema é na hora de alterar os dados, pois na tela de alteração todos os dados são carregados , porém o selectOneMenu não aparece com a opção que o usuário escolheu(ela aparece com o conjunto de opçoes mas não está selecionada a opcao que o usario escolheu).

[color=red]Há alguma forma de deixar o SelecOneMenu mostrando o dado que o usuário escolheu?[/color]

Desde já agradeço àqueles que responderem :D.

Olá Thais,

se os dados estão sendo carregados, deveria funcionar.

Faça algo semelhante ao código abaixo para testar se foi carregado:

Valor: #{manager.bean.atributo}
<p:selectOneMenu value="#{manager.bean.atributo} ... />

Se em “Valor:” estiver aparecendo como o esperado , creio que o seu problema pode ser equals/hashcode.
Você implementou equals e hashcode da sua entidade?

<p:selectOneMenu id="objeto" var="objeto"
							value="#{objetoControle.objeto.opcaoEscolhida}" effect="fade"
							converter="ObjetoConverter"> //Se precisar de converter.
							<f:selectItems value="#{objetoControle.objetosParaSelecionar}" />
						</p:selectOneMenu>

<h:outputText value="Departamento Superior: " styleClass="label-class"/> <h:panelGrid columns="2" width="100%"> <p:selectOneMenu id="depSuperior" value="#{beanCadastroDepartamento.departamento.depSuperior}"> <f:selectItem itemLabel="Nenhum" itemValue=""/> <f:selectItems value="#{beanCadastroDepartamento.listaDepartamentoSuperior}" /> <f:converter converterId="SelectOneMenuConverter"/> </p:selectOneMenu> <p:message for="depSuperior" styleClass="css-messagem-erro" /> </h:panelGrid>

A lista com as opções aparece … mas não com a opção que o usuário escolheu selecionada…a opção que o usuario esolheu está na lista que aparece mas ela não aparece como selecionada…entenderam?

Tente tirando isso:

<f:selectItem itemLabel="Nenhum" itemValue=""/>  

Já tentei tirar e nada… DD:

eu entendi sim, por isso perguntei se vc implementou o equals e o hashcode na sua entidade departamento?

eles são utilizados pelo componente jsf para verificar se o item está na lista.

Se tiver, veja se no código não tem um “getClassName()”, pois não funcionará nos casos que o hibernate utilizar um proxy.

Rockkkk!!!

Faltava eu implementar o equals e o hashcode (pensei que já tinha feito isso ¬¬")…

Obrigada :smiley:

Por nada!

verifique também se tem algo parecido com isto:

if (obj.getClass() != getClass()) { return false; }

Se você gerou com o Eclipse, é provável que tenha.
Se tiver, utilize o instanceof no lugar. Se não você pode cair no mesmo problema.
Será pior para descobrir o erro porque haverá equals e hashcode, mas eles não estarão funcionando quando um dos objetos for um proxy do hibernate.
Sugiro que já faça esse ajuste/revisão em todas as suas entidades, mesmo que esteja funcionando :!: