Pretty Code Blog

Just another weblog about development

25  08 2009

Carregar selectOneMenu ao escolher um outro selectOneMenu?

Em JSF, como carregar um combo de cidades ao escolher um estado em um combo?

A solução que mais gosto é o ValueChangeListener. O ValueChangeListener faz uma requisição a um bean no momento que um determinado valor for alterado, no caso o estado.


Um exemplo:

Combo de estado:

<h:selectOneMenu id="tipo" value="#{meuController.endereco.estado}" valueChangeListener="#{meuController.trocaCidadesEstado}" >
<f:selectItems value="#{meuController.listaEstados}" />
</h:selectOneMenu>

Combo de cidades:

<h:selectOneMenu id="tipo" value="#{meuController.endereco.cidade}" >
<f:selectItems value="#{meuController.listaCidades}" />
</h:selectOneMenu>

MeuBean.java

/**
* Listener que atualiza o combo de cidades dependendo do estado escolhido
*
* @param event
*/
public void trocaCidadesEstado(ValueChangeEvent event) {
// garantindo que o valor do combo de estados mudou
if (event.getNewValue() != event.getOldValue()) {
List<Cidade> lista = new ArrayList<Cidade>();
try {
lista = cidadesService.findCidadesByEstado(event.getNewValue().toString());
} catch (Exception e) {
...
}
this.listaCidades = MeuUtil.montaSelectItems(lista);
}
}

Tags: , ,
  • Kleber Cardoso

    Olá amigo, td bem?
    Quero te parabenizar pelo artigo. A maioria dos desenvolvedores passam por essa dificuldade, principalmente os que estão iniciando em JSF (EU).
    Gostaria de saber se tem como vc disponibilizar um modelo ou exemplo mais completo referente a esse artigo.

    Agradeço desde já e desejo um Feliz ano novo!!!

    [Responder]

« »

Switch to our mobile site

Switch to our mobile site