1 Reply Latest reply on Jul 16, 2009 5:06 AM by Ilya Shaikovsky

    Dropdown of multiple dependence

    Luciano Silva Newbie

      Hello there,

      I have a problem with multiple dependence of 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?

      My manager bean:

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



      
      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!