JSF + Richfaces Dropdowns Cascade

0 respostas
lusilva1982

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.

Criado 4 de julho de 2008
Respostas 0
Participantes 1