P:ajax nao esta sendo Executado

E ai galera, to com um problema aqui…

to começando a desenvolver em ambiente Web e to sofrendo um pouquin…

eu tenho 3 combos, Pais, Estado e Cidade…
E preciso q quando troque o pais, mude o combo estado e quando mude o estado, mude as cidades.,

[code]
<h:outputLabel value="*Pais"/>
<h:selectOneMenu value="#{bairroMB.pais}"
converter=“convertePais”
id=“pais”>
<f:selectItems value="#{bairroMB.paises}"
var=“p”
itemLabel="#{p.nome}"
itemValue="#{p}" />
<p:ajax listener="#{bairroMB.refreshPais}"
immediate=“true”
event=“change”
update=“estado, cidade”
process=“pais” />
</h:selectOneMenu>

                    <h:outputLabel value="*Estado"/>
                    <h:selectOneMenu value="#{bairroMB.estado}"
                                     converter="converteEstado"
                                     id="estado">
                        <f:selectItems value="#{bairroMB.estados}"
                                       var="e"
                                       itemLabel="#{e.nome}"
                                       itemValue="#{e}" />
                        <p:ajax listener="#{bairroMB.refreshEstado}"
                                event="change"
                                update="cidade"
                                process="estado" />
                    </h:selectOneMenu>

                    <h:outputLabel value="*Cidade"/>
                    <h:selectOneMenu id="cidade" value="#{bairroMB.bairro.cidade}"
                                     converter="converteCidade"
                                     required="true"
                                     requiredMessage="Campo [Cidade] obrigatório">
                        <f:selectItems value="#{bairroMB.cidades}"
                                       var="c"
                                       itemLabel="#{c.nome}"
                                       itemValue="#{c}" />
                    </h:selectOneMenu>[/code]

Porem ao trocar um item do combo pais, ele nem chega a executar o metodo refreshPais…

e no meu MB esta assim

[code]

public void refreshPais() {
cidades.clear();
estados.clear();
loadEstados(pais);
if (!estados.isEmpty()) {
estado = estados.get(0);
loadCidades(estado);
}
}

public void refreshEstado() {
    loadCidades(estado);
}[/code]

Alguem sabe o q pode ser isso?

ainda não usei o prime… mas vamos ver se ajuda…
ele não atualiza o refreshPais pq vc não esta atualizando o componente com id pais, somente estado e cidade…

update="estado, cidade" 

e outra coisa… não faz sentido vc escolher país e mandar atualizar país…
vc tem que escolher país e mandar atualizar o id estado, e la no método getEstados fazer sua consulta conforme o país e assim por diante…
entendeu?

Mas o metodo refreshPais nem eh chamado… é como se esse codigo nao estivesse ai…

outra coisa, o metodo refreshPais() chamado no combo Pais, atualiza o combo estado e nao ele mesmo…

Tente assim…

<f:ajax listener="#{bairroMB.refreshPais}"  event="change" render="estado cidade" />  

Por que usar f:ajax no lugar de p:ajax
Ajax é nativo do JSF e usando o f:jax a tendência é ser executado mais rapidamente.
é só por questão de desempenho.

public void refreshPais(AjaxBehaviorEvent event) throws AbortProcessingException {  
        cidades.clear();  
        estados.clear();  
        loadEstados(pais);  
        if (!estados.isEmpty()) {  
            estado = estados.get(0);  
            loadCidades(estado);  
        }  
    }  

Acredito que agora pelo menos vai executar.

Vc crio um listener porém não declaro na assinatura do método.
De uma estudada sobre listener que irá entender melhor.

estou tentando montar algo parecido , mas o listener está funcionando, o que eu queria é colocar as comobos aninhadas dentro de um crud , quando for inserir traz as combos em selecione para escolher estado e cidade e quando for editar ( ONDE ESTOU TENDO MAIS PROBLEMAS) apareça selecionado os combos de acordo com o que ja está cadastrado … alguem tem um codigo qe possa dar um exemplo dessa situação ?

[quote=DeGuedes]Mas o metodo refreshPais nem eh chamado… é como se esse codigo nao estivesse ai…

outra coisa, o metodo refreshPais() chamado no combo Pais, atualiza o combo estado e nao ele mesmo…[/quote]

Verifica se teu template tá com , se tiver mudar pra <h:body> que vai funcionar.

[quote=raphael_pf][quote=DeGuedes]Mas o metodo refreshPais nem eh chamado… é como se esse codigo nao estivesse ai…

outra coisa, o metodo refreshPais() chamado no combo Pais, atualiza o combo estado e nao ele mesmo…[/quote]

Verifica se teu template tá com , se tiver mudar pra <h:body> que vai funcionar.[/quote]

Valew Rafael, resolveu o meu problema, thks!