[JSF] Uma Combo Preenchendo a Outra (Estado / Cidade) - Estado se auto seleciona

2 respostas
GabrielCardelli

Opa Pessoal beleza? estou com um problema que não estou conseguindo resolver.

Tenho uma combo Estado e outra cidade

Estado: [Escolha v]
Cidade: [Escolha v]

Em Estado tenho 2 estados cadastrados

RJ
SP

Quando eu clico no "v" de Estado isto é listado para mim e eu escolho RJ , é listado para mim todas as cidades do RJ
Eu não estou conseguindo fazer quando o usuário apaga o combo Estado não está apagando os dados do combo Cidade =/
Na verdade não está executando meu método quando o cara apaga somente quando ele escolhe =/

Abaixo segue o código:

<h:form id="meuForm">

	<rich:panel header="Alter Client" style="align:center;width:500px">
	
		 <rich:comboBox>		 
		 	<f:selectItems value="#{userBean.users}" />		 
		 </rich:comboBox>
		
		 <rich:comboBox id="estados" valueChangeListener="#{userBean.loadCidades}" 
		 		defaultLabel="Escolha"
		 		selectFirstOnUpdate="false">	 
		 	
		 	<f:selectItems value="#{userBean.estados}"  />		 	
		    <a4j:support event="onchange" reRender="cidades"></a4j:support>	
		    	 		 
		 </rich:comboBox>
		 
		 <rich:comboBox immediate="true" id="cidades" defaultLabel="Escolha">	
		 	 
		 	<f:selectItems value="#{userBean.cidades}" />		
		 	 
		 </rich:comboBox>
	
	</rich:panel>

</h:form>
public class UserBean {
	
	private User user = new User();
	private List<User> users = new ArrayList<User>();
	private List<Estado> estados = new ArrayList<Estado>();
	private List<Cidade> cidades = new ArrayList<Cidade>();	
	private String estado;	

	public void setEstados(List<Estado> estados) {
		this.estados = estados;
	}

	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public List<SelectItem> getUsers() {

		List<SelectItem> select = new ArrayList();
		
		for(User u : users){
			SelectItem si = new SelectItem();
			si.setLabel(u.getUsername());
			si.setValue(u.getUsername());
			select.add(si);
		}
		
		return select;
		
	}
	
	public List<SelectItem> getEstados() {
		
		List<SelectItem> select = new ArrayList();
		
		for(Estado u : estados){
			SelectItem si = new SelectItem();
			si.setLabel(u.getNome());
			si.setValue(u.getNome());
			select.add(si);
		}
		
		return select;
		
	}
	
	public List<SelectItem> getCidades() {

		List<SelectItem> select = new ArrayList();
		
		for(Cidade u : cidades){
	 
			if(u.getEstado().getNome().equals(estado)){
				SelectItem si = new SelectItem();
				si.setLabel(u.getNome());
				si.setValue(u.getNome());
				select.add(si);
			}
			
		}
		
		return select;
	}

	public void setUsers(List<User> users) {
		this.users = users;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
	
	public void loadCidades(ValueChangeEvent event){
		estado = event.getNewValue().toString();
		Session s = SessionFactory.getSession();
		Criteria c = s.createCriteria(Cidade.class);
		cidades = c.list();
	}
	
}

Quem puder ajudar, agradeço. Valeu pessoal.

2 Respostas

Tchello

Cara, existem vários tópicos falando disso.
O difícil pra se encontrar essa informação está justamente nas palavras chave, aqui vai uma dica:

Procure por “combos aninhados” ou de preferência (se o inglês não for um fator limitante) “nested combos”.

Com isso você será capaz de encontrar bastante informações, inclusive já vi por aí tutoriais exatamente desse caso descrito em JSF.

Abraços.

GabrielCardelli

Valeu Tchello,
O problema realmente e a palavra chave vou pesquisar com essas ae

Obrigado.

Criado 14 de agosto de 2010
Ultima resposta 14 de ago. de 2010
Respostas 2
Participantes 2