Galera estou tendo problema com validação quando utilizo o componete h:selectOneMenu.
Abaixo segue o código da view… quando seleciono o estado ele faz a conversão para um objeto Estado… atualizo o select com cidades que estão em instituicao.estadoSelected.cidades
porem ao submeter o form da o seguinte erro :
select_cidades: Erro de validação: o valor não é válidoselect_cidades: Erro de validação: o valor não é válido
já sobrescrevi hash e o equals… da classe Estado e da classe Cidade… porem continua com erro somente na list de cidade.
view
<p:dialog widgetVar="addEndereco" resizable="false" width="500" header="Novo Endereco">
<p:panel>
<h:form prependId="false">
<h:panelGrid columns="2" id="box_endereco">
<h:outputLabel value="Endereco"/>
<h:inputText id="endereco" value="#{instituicao.endereco.endereco}" required="true" requiredMessage="Endereço Obrigatório"/>
<h:outputText value="Numero"/>
<h:inputText id="numero" value="#{instituicao.endereco.numero}" required="true" requiredMessage="Numero Obrigatório"/>
<h:outputText value="Bairro"/>
<h:inputText id="bairro" value="#{instituicao.endereco.bairro}" required="true" requiredMessage="Bairro Obrigatório"/>
<h:outputText value="Estados"/>
<h:selectOneMenu value="#{instituicao.estadoSelected}">
<f:selectItems var="state" value="#{instituicao.estados}" itemValue="#{state.id}" itemLabel="#{state.nome}"/>
<f:converter converterId="estado"/>
<p:ajax update="select_cidades" />
</h:selectOneMenu>
<h:outputText value="Cidade"/>
<h:selectOneMenu id="select_cidades" valueChangeListener="#{instituicao.cidadeSelected}" converter="cidade">
<f:selectItems var="city" value="#{instituicao.estadoSelected.cidades}" itemValue="#{city.id}" itemLabel="#{city.nome}"/>
</h:selectOneMenu>
</h:panelGrid>
<p:commandButton value="Salvar" image="ui-icon ui-icon-disk" action="#{instituicao.saveEndereco()}" ajax="false"/>
</h:form>
</p:panel>
</p:dialog>
- conversor
public class CidadeConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Cidade cidade = CidadeDao.getCidade(new Long(value));
return cidade;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null) {
return null;
} else {
return String.valueOf(value.hashCode());
}
}
}
- classe Cidade
obs: no equals eu retornei true para ver se conseguia eliminar o erro.
public class Cidade {
private long id;
private String nome;
private Estado estado = new Estado();
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public boolean equals(Object obj) {
return true;
}
@Override
public int hashCode() {
return (int) this.id;
}
}
Estou iniciando meus estudos em Java e JSF , porem não sei se esta correto o modo que estou fazendo…
Obrigado.