Pessoal, estou com a seguinte dúvida, como posso fazer 2 dropdown (Pais e Estado) em que o segundo seja dependente do primeiro, fazendo o processo em Ajax4jsf?
Eu montei a estrutura de carregamento dos dropdowns porém, não sei como fazer a iteração entre os componentes, vejam:
public class RegiaoControl implements Serializable {
private RegiaoDAO rdao;
private ArrayList<Pais> listPais;
private Pais pais;
private SelectItem[] itemDropDownPais;
private SelectItem[] itemDropDownEstado;
public RegiaoControl(){
rdao = new RegiaoDAO();
listPais = rdao.getAllPais();
dropDownPais(null);
dropDownEstado(null);
}
/* Getters / Setters */
public List autoCompletePais(Object o){
return rdao.getAllPais( o.toString() );
}
public ArrayList<Estado> getEstados(int pais){
return rdao.getEstadosDoPais( pais );
}
/* DropDowns */
public void dropDownPais(ValueChangeEvent vce){
Collection coll = rdao.getAllPais();
if( coll == null || coll.size() == 0 ){
}else{
int counter = 0; // contador
itemDropDownPais = new SelectItem[coll.size()];
Iterator it = coll.iterator();
while( it.hasNext() ){
Pais p = (Pais) it.next();
itemDropDownPais[counter] = new SelectItem(p.getId_pais(), p.getNome());
counter++;
}// while end
}
}//
public void dropDownEstado(ValueChangeEvent vce){
// obter o valor
/* Não funcionou, deu erro!
UIParameter param = (UIParameter) vce.getComponent().findComponent("pais");
Integer codPais = Integer.valueOf(param!=null ? param.getValue().toString() : "0");
System.out.println("Cod. Pais: " + codPais);
*/
Collection coll = rdao.getEstadosDoPais(33);
if( coll == null || coll.size() == 0 ){
}else{
int counter = 0; // contador
itemDropDownEstado = new SelectItem[coll.size()];
Iterator it = coll.iterator();
while( it.hasNext() ){
Estado e = (Estado) it.next();
itemDropDownEstado[counter] = new SelectItem(e.getId_estado(), e.getNome());
counter++;
}// while end
}
}//
/* */
}
O JSP está montado assim:
<h:outputText value="Pais"/>
<h:selectOneMenu id="pais"
immediate="true"
valueChangeListener="#{regiaoControl.dropDownPais}">
<f:selectItems
value="#{regiaoControl.itemDropDownPais}"/>
</h:selectOneMenu>
<h:outputText value="Estado"/>
<h:selectOneMenu id="estado"
immediate="true"
valueChangeListener="#{regiaoControl.dropDownEstado}">
<f:selectItems
value="#{regiaoControl.itemDropDownEstado}"/>
</h:selectOneMenu>
Alguma dica?
Thanks a lot.