Multiple Dropdown Dependent
lucianosilva Jul 15, 2009 12:29 AMHello there,
I have a problem with three dependent dropdown, I need display in this order, see:
1- Country
2- State
3- City
So, I can build the dropdown to Country and States with dependents functions, but, when the state are selected the cities not loaded. You understand me?
// JSF
<h:panelGrid id="panel" rendered="true" border="0" columns="2" width="500" cellpadding="1" cellspacing="2">
<h:outputLabel value="Pais" for="pais"/>
<h:selectOneMenu id="pais"
value="#{umb.pessoa.pais.id_pais}"
rendered="true">
<f:selectItems value="#{umb.paises}"/>
<a4j:support event="onchange"
ajaxSingle="true"
action="#{umb.actionCarregarEstados}"
reRender="estado"/>
</h:selectOneMenu>
<h:outputLabel value="Estado" for="estado"/>
<h:selectOneMenu id="estado"
value="#{umb.pessoa.estado.id_estado}"
rendered="true">
<f:selectItems value="#{umb.estados}"/>
<f:converter converterId="estadoConvert"/>
<a4j:support event="onchange"
ajaxSingle="true"
action="#{umb.actionCarregarCidades}"
reRender="cidade"/>
</h:selectOneMenu>
<h:outputLabel value="Cidade" for="cidade"/>
<h:selectOneMenu id="cidade"
value="#{umb.pessoa.cidade.id_cidade}"
rendered="true">
<f:selectItems value="#{umb.cidades}"/>
</h:selectOneMenu>
</h:panelGrid>
My Manager Bean
public class UirapuruManagerBean {
/** hide **/
public SelectItem[] getPaises(){
List<Pais> lp = regiaoDao.getAllPais();
List<SelectItem> itens = new ArrayList<SelectItem>(lp.size());
for( Pais p : lp ){
itens.add( new SelectItem(p.getId_pais(), p.getNm_pais()) );
}// for end
return itens.toArray( new SelectItem[itens.size()] );
}
public SelectItem[] getEstadosByPais(int id_pais){
List<Estado> estados = regiaoDao.getEstadosDoPais(id_pais);
List<SelectItem> itens = new ArrayList<SelectItem>(estados.size());
for( Estado e : estados ){
itens.add( new SelectItem(e.getId_estado(), e.getNm_estado()) );
}// for end
return itens.toArray( new SelectItem[itens.size()] );
}
public SelectItem[] getCidadesByEstado(int id_estado){
System.out.println("ID-Estado: " + id_estado);
List<Cidade> cidades = regiaoDao.getCidadesDoEstado(id_estado);
List<SelectItem> itens = new ArrayList<SelectItem>(cidades.size());
for( Cidade c : cidades ){
itens.add( new SelectItem(c.getId_cidade(), c.getNm_cidade()) );
}// for end
return itens.toArray( new SelectItem[itens.size()] );
}
public String actionCarregarEstados(){
this.estados = getEstadosByPais( getPessoa().getPais().getId_pais() );
return "SUCCESS";
}
public String actionCarregarCidades(){
this.cidades = getCidadesByEstado( getPessoa().getEstado().getId_estado() );
return "SUCCESS";
}
}
I using a Convert Class, but not resolve this problem, the attribute pessoa.estado.id_estado into Manager Bean not receive the value when change value in <h:selectOneMenu id="estado">.
What's happening?
Help me, please!
Thanks!