Olá pessoa, td bem?
Então, estou com um probleminha meu chato.
Tenho uma <h:selectOneMenu> com Estados que carrega outra <h:selectOneMenu> Cidades.
[code]<s:decorate id=“telefoneField” template="/layout/edit.xhtml">
<ui:define name=“label”>Telefone</ui:define>
<h:inputText id=“telefone”
value="#{usuario.pessoa.telefone}"/>
</s:decorate>
<s:decorate id="estadoField" template="/layout/edit.xhtml">
<ui:define name="label">Estado</ui:define>
<h:selectOneMenu id="estados"
value="#{cidadeEstadoManager.estado}" >
<s:selectItems value="#{cidadeEstadoManager.estados}"
var="estado"
label="#{estado.nome}"
noSelectionLabel="Selecione..."/>
<s:convertEntity />
<a:support event="onchange" reRender="cidades" ajaxSingle="true" ignoreDupResponses="true"/>
</h:selectOneMenu>
</s:decorate>
<s:decorate id="cidadeField" template="/layout/edit.xhtml">
<ui:define name="label">Cidade</ui:define>
<h:selectOneMenu id="cidades"
value="#{usuario.pessoa.cidade}" >
<s:selectItems value="#{cidadeEstadoManager.cidades}"
var="cidade"
label="#{cidade.nome}"
noSelectionLabel="Selecione..."/>
<s:convertEntity />
</h:selectOneMenu>
</s:decorate>
[/code]
Ele carrega as cidades, td certinho, mas, quando eu vou salvar, dá o erro:
"Validation Error: Value is not valid"
Bom, pra tentar solucionar isto, sobrescrevi os métodos equals e hasCode do meu POJO.
@Override
public boolean equals(Object obj) {
if ( !( obj instanceof Cidade ) )
return false;
Cidade c = (Cidade) obj;
if ( this.getId() == c.getId())
return true;
return false;
}
@Override
public String toString() {
return String.valueOf(this.getId());
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((estado.getId() == null) ? 0 : estado.getId().hashCode());
return result;
// return super.hashCode();
}
Porém, o problema persiste.
Alguém sabe como resolver?
Obrigado a todos.
JCMASTER
Julio Cesar de Godoi
Estagiário Java
Graduando em Ciência da Computação
Cursando 8º Semestre