Como carregar um selectOneMenu(combobox) atravez da escolha de um outro selectOneMenu- JSF

5 respostas
W

Boa noite pessoal… gostaria de saber como faço para carregar um selectOneMenu através de outro.
Por ex: tenho um BD com a sigla da UF, quando eu escolher a UF, carregar no proximo combo box todas as cidades daquela UF.

se alguem tiver um exemplo ou ago do tipo… estou utilizando JSF.

desde já agradeço!

5 Respostas

G

Voce pode usar o valueChangeListener, que fará uma requisição a um bean no momento que um valor for alterado, no caso o estado.

Um exemplo:

combo de estados

<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>

MeuController.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); } }

abraços

K

gigicantador:
Voce pode usar o valueChangeListener, que fará uma requisição a um bean no momento que um valor for alterado, no caso o estado.

Um exemplo:

combo de estados

<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>

MeuController.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); } }

abraços

Olá gigicantador, td bem?

Sei que o post é antigo, mas eu gostaria de sua ajuda… estou com o mesmo problema do colega, e estou apanhando um bocado pra usar esses combos aninhados. Vc pode ser mais específica em sua explicação? Sou iniciante em java e toda ajuda é bem vinda. Agradeço e abs.

C

Da uma estudada em listeners ou manipuladores de eventos !

K

Valeu pela resposta. Já faz mais de mês que estou estudando sobre essas paradas, o problema é que fiquei emperrado em ajax, inclusive em um outro post…

http://www.guj.com.br/posts/list/60/131782.java#807111

Se puder contribuir, agradeço.

M

olá pessoal

revivendo o post…
gostaria de tirar uma duvida, estao tentar implementar a ideia passada por vocês,
mas o metodo no meu controller nem se quer é chamado…
o que poderia ser?!? alguma configuração que possa estar faltando?!?

estou utilizando JSF 2.0 + Facelets
tentei utilizar o ajax nativo nesta versão do JSF, porém sem sucesso!
obrigado(a)

Criado 24 de agosto de 2009
Ultima resposta 25 de mai. de 2010
Respostas 5
Participantes 5