Atualizar combo dependente ao alterar combo pai - primefaces

Boa noite pessoal.

Estou desenvolvendo um sistema com jsf + hibernate + primefaces, preciso que ao alterar o valor de um combo pai, que o combo dependente seja carregado com uma nova lista.

xhtml:


                        <h:outputLabel style="font-size: small" for="estado" value="UF:" />  
                        <p:selectOneMenu style="font-size: small" value="#{clientesBean.cliente.acsEstado}" 
                                         id="estado" label="estado">
                            <p:ajax update="cidade" process="@this" listener="#{clientesBean.atualizaCidades}" />  
                            <f:selectItem itemValue="#{clientesBean.empresa.acsEstado}" itemLabel="#{clientesBean.empresa.acsEstado.uf}"/>
                            <f:selectItems value="#{clientesBean.estados}" var="estado" itemLabel="#{estado.uf}" itemValue="#{estado}"/>
                        </p:selectOneMenu>
                        <h:outputText value="*" style="color:red"/>

                        <h:outputLabel style="font-size: small" for="cidade" value="cidade:" />  
                        <p:selectOneMenu style="font-size: small" value="#{clientesBean.cliente.acsCidade}" 
                                         id="cidade" label="cidade">
                            <f:selectItem itemValue="#{clientesBean.empresa.acsEstado}" itemLabel="#{clientesBean.empresa.acsCidade.cidade}"/>
                            <f:selectItems value="#{clientesBean.cidades}" var="cidade" itemLabel="#{cidade.cidade}" itemValue="#{cidade}"/>
                        </p:selectOneMenu>
                        <h:outputText value="*" style="color:red"/>

o metodo listaCidades do bean:

    public void atualizaCidades() {
        System.out.println("ClientesBean.atualizaCidades - estado: " + cliente.getAcsEstado().getUf());
        cidades = (List<AcsCidade>) session.createQuery("select c from AcsCidade c where c.acsEstado.idEstado = :idEstado").setInteger("idEstado", cliente.getAcsEstado().getIdEstado()).list();
    }

Ao selecionar um estado, a combo cidade é sofre update, no entanto, o metodo do bean não é chamado. Alguém consegue ajudar?

Esse exemplo mostra como utilizar ajax.

A única diferença é que ao invés de usar f:ajax você vai utilizar p:ajax

JSF Exemplos Simples com Ajax

Hebert, obrigado pelo link.

Acredito que meu problema esteja realmente no trecho abaixo:

<p:ajax update="cidade" process="@this" listener="#{clientesBean.atualizaCidades}"/>  

O listener não chama o metodo do bean.
Troquei listener por:

  • partialSubmit
  • onComplete
  • onSuccess
  • onStart

em todos os casos, os processos do servidor para atualização do combo cidade entram em loop…
acredito que isto esteja acontecendo porque os dados de estado e cidade já são atualizados ao abrir o popup por por um botão na pagina principal:

            <p:commandButton action="#{clientesBean.startInclui}" icon="ui-icon-plusthick"     
                             process="@this" update=":formInclui" ajax="true" value="incluir" onclick="dlg1.show();">    
                <f:setPropertyActionListener target="#{clientesBean.empresa}" value="#{loginBean.empresa}"/>    
            </p:commandButton>