Ajax em SelectOneMenu

5 respostas
M

Boa Dia pessoal, gostaria de saber se existe alguma configuração a mais a se fazer para poder utilizar o ajax em uma SelectOneMenu, a ideia era a seguinte era disponibilizada uma lista(ainda que pequena) em uma SelectOneMenu, ai seria selecionado um item da lista colocado em uma variavel, ai o ajax (deveria funcionar) renderizando a outra SelectOneMenu que pegaria a variavel verificaria o valor dela e então montaria a lista de acordo.

xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
         xmlns:h="http://java.sun.com/jsf/html"  
         xmlns:f="http://java.sun.com/jsf/core">  
       <h:head>  
           <title>Hello WOrld!</title>  
       </h:head>  
       <h:body>  
           <h:messages />  
           <h:form>  
               <h:selectOneMenu id="paises" value="#{testeBean.paisEscolhido}"
               					onchange="submit()">
               		<f:ajax event="change" actionListener="#{testeBean.estados}" render="mostraEstados" execute="paises"/>
               		<f:selectItems value="#{testeBean.pais}"/>            		
               </h:selectOneMenu>
           
           		  <h:selectOneMenu id="mostraEstados" value="#{testeBean.estadoEscolhido}">
    		  		<f:selectItems value="#{testeBean.estados}"/>
    		  </h:selectOneMenu>
           
           </h:form>  
       			
       </h:body>  
    </html>

bean:

@ManagedBean
@RequestScoped
public class TesteBean {
	
	
	public List<String> pais = new ArrayList<>();
	
	public List<String> estados = new ArrayList<>();
	
	public String paisEscolhido;
	
	public String estadoEscolhido;
	
	
	public List<String> getEstados() {
		
		if(this.estados == null || this.estados.size() == 0){
			estados.add("selecione um pais estado");
		}else if(this.paisEscolhido.equals("Alemanha")){
			
			estados = new ArrayList<>();
			estados.add("SL 1");
			estados.add("SL 2");
			estados.add("SL 3");
			
		}else if(this.paisEscolhido.equals("Brasil")){
			
			estados = new ArrayList<>();
			estados.add("SLB 1");
			estados.add("SLB 2");
			estados.add("SLB 3");
			
		}
		
		return estados;
	}

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

	public List<String> getPais() {
		
		if(pais == null || pais.size() == 0){
			pais.add("escolha um pais");
			pais.add("Alemanha");
			pais.add("Brasil");
		}
		return pais;
	}

 //metodos getters and setters.

5 Respostas

Hebert_Coelho

E qual o erro está dando?

M

Nenhum ele simplesmente não atualiza o SelectOneMenu. Bom procurei em varios tutoriais, na documentação da jsf também.

Hebert_Coelho

Veja c te ajuda: JSF Exemplos Simples com Ajax.

M

Boa Tarde, então eu ja havia olhado primeiro fiz esse seu hello world, dps tentei colocar ajax em umas outras tags. Mas esse ta mais dificil do que resolver o cubo mágico.

M

Tentei fazer renderizar uma tabela quando escolhece um pais mas também não consegui, a forma com que estou escrevendo a tag <f:ajax /> está incorreta mas está igual a da documentation, pelo que eu entendi. Só preciso utilizar : quando é um item de fora do item onde o ajax está o que não é o caso. Tentei também pegando por evento com ValueChangeEvent ele também não pega o valor, sei que não pega pois coloquei saidas como System.out.println(); nos métodos getters and setters e nenhum coloco nada no console nem getPaisEscolhido, nem setEstadoEscolhido.

Criado 29 de dezembro de 2012
Ultima resposta 30 de dez. de 2012
Respostas 5
Participantes 2