Boa noite,
estou com a seguinte situação: Tenho 3 SelectOneMenu (Pais,Estado e Cidade), eu quero assim que selecionar o pais ele carregar o select dos estados e quando selecionado o estado carregar o das cidades.
Eu consigo carregar o SelectOneMenu dos estados ao selecionar o pais, mais quando seleciono o estado para carregar a cidade ele nem chega a disparar o método do evento change. Ele só dispara o método quando eu clico no primeiro item do Select que é “Selecione um estado:”.
Campos SelectOneMenu:
<h:outputLabel value="Pais:" for="pais"/>
<h:selectOneMenu id="comboPais"
value="#{usuarioBean.usuario.endereco.pais.idPais}"
required="true">
<f:selectItem itemLabel="Selecione o país:" itemValue="0"/>
<f:selectItems value="#{paisBean.paises}"/>
<f:ajax event="change" render="comboEstado" listener="#{usuarioBean.atualizarEstados}"/>
</h:selectOneMenu>
<h:outputLabel value="Estado:" for="estado"/>
<h:selectOneMenu id="comboEstado"
value="#{usuarioBean.usuario.endereco.estado.idEstado}"
required="true">
<f:selectItem itemLabel="Selecione o estado:" itemValue="0"/>
<f:selectItems value="#{usuarioBean.listaEstados}" />
<f:ajax event="change" render="comboCidade" listener="#{usuarioBean.atualizarCidades}"/>
</h:selectOneMenu>
<h:outputLabel value="Cidade:" for="cidade"/>
<h:selectOneMenu id="comboCidade" value="#{usuarioBean.usuario.endereco.cidade.idCidade}" required="true">
<f:selectItem itemLabel="Selecione a cidade:" itemValue="0"/>
<f:selectItems value="#{usuarioBean.listaCidades}"
var="cidade"
itemLabel="#{cidade.descricaoCidade}"
itemValue="#{cidade.idCidade}" />
</h:selectOneMenu>
Métodos do usuarioBean:
public void atualizarEstados(AjaxBehaviorEvent event) {
long idPais = this.usuario.getEndereco().getPais().getIdPais();
this.listaEstados = new ArrayList<SelectItem>();
if (idPais != 0) {
EstadoRN estadoRN = new EstadoRN();
List<Estado> estados = new ArrayList<Estado>(estadoRN.listar(idPais));
for (Estado e : estados) {
SelectItem se = new SelectItem();
se.setValue(e.getIdEstado());
se.setLabel(e.getDescricaoEstado());
this.listaEstados.add(se);
}
} else {
this.listaEstados = null;
}
}
public void atualizarCidades(AjaxBehaviorEvent event) {
long idEstado = this.usuario.getEndereco().getEstado().getIdEstado();
this.listaCidades = new ArrayList<SelectItem>();
if (idEstado != 0) {
CidadeRN cidadeRN = new CidadeRN();
List<Cidade> cidades = new ArrayList<Cidade>(cidadeRN.listar(idEstado));
for (Cidade c : cidades) {
SelectItem se = new SelectItem();
se.setValue(c.getIdCidade());
se.setLabel(c.getDescricaoCidade());
this.listaCidades.add(se);
}
} else {
this.listaCidades = null;
}
}
Alguem pode me dizer o que eu posso estar fazendo de errado ?