P:ajax nao esta sendo Executado

6 respostas
DeGuedes

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.,,,

<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>

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

e no meu MB esta assim
public void refreshPais() {
        cidades.clear();
        estados.clear();
        loadEstados(pais);
        if (!estados.isEmpty()) {
            estado = estados.get(0);
            loadCidades(estado);
        }
    }

    public void refreshEstado() {
        loadCidades(estado);
    }

Alguem sabe o q pode ser isso?

6 Respostas

alves.Felipe

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?

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…

fernandogodoy18

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.

tenclar

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 ?

raphael_pf

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…

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

B

raphael_pf:
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…

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

Valew Rafael, resolveu o meu problema, thks!

Criado 15 de julho de 2011
Ultima resposta 13 de dez. de 2011
Respostas 6
Participantes 6