Problema com Ajax PrimeFaces

Olá pessoal, estou recorrendo a vcs pq já to ficando doido de tanto procurar o q está acontecendo.
Tenho uma página ajax com um form, mas dentro do form tem um p:dataTable e a baixo dele tem um alguns campos para alimentar esta tabela. O q está acontecendo é q no botão Adicionar é q eu quero enviar apenas os campos q estão de baixo do data table e atualizar o dataTable, mas na hora q vc aperta o botão não acontece nada, nenhum erro nada no console. Coloquei um System out no método q o botão chama, e constatei q o método n é chamado, então fiz um teste colocando no botão process="@none" e tirei o update="", ai retornou um erro de null pointer (normal ja q eu n enviei o objeto), percebendo isso, vejo q o problema é nos parâmetros process="" e update="". Pelo o q li na documentação os parâmetros passados estão corretos.
Obrigado.

O botão problematico

<p:commandButton value="Adicionar" actionListener="#{apartamentoBean.adicionarMorador()}" update="moradores" process="moradorNome,moradorIdentidade,moradorOrgExp,moradorNascimento,moradorTelefone" />

Bean

    public void adicionarMorador() {
        System.out.println("---> 1");
    }

Página

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui">
    
    <h:form prependId="false" id="formSalvar">
        <h:panelGroup layout="block" rendered="#{apartamentoBean.mostrarTelaSalvar()}">
            <h:messages />
            <div class="form-container">
                <h3>Novo Apartamento</h3>

                <h:inputText value="#{apartamentoBean.apartamento.idApartamento}" />
                
                <table class="form">
                    <tr>
                        <td>Apto</td>
                        <td>Bloco</td>
                        <td>Tipo</td>
                        <td>Morador desde</td>
                    </tr>
                    <tr>
                        <td class="input-container" style="width: 70px;"><h:inputText class="input" value="#{apartamentoBean.apartamento.numero}" /></td>
                        <td class="input-container select-container">
                            <select class="select" name="bloco">
                                <option value="">Selecione...</option>
                            </select>
                        </td>
                        <td class="input-container select-container">
                            <h:selectOneMenu styleClass="select" value="#{apartamentoBean.apartamento.proprietario}">
                                <f:selectItem itemValue="0" itemLabel="Locatário" />
                                <f:selectItem itemValue="1" itemLabel="Proprietário" />
                            </h:selectOneMenu>
                        </td>
                        <td class="input-container">
                            <h:inputText styleClass="input" value="#{apartamentoBean.apartamento.dataEntrada}" />
                        </td>
                    </tr>
                </table>

                <h3 style="margin-top: 20px;">Moradores</h3>

                <h:panelGroup layout="block" id="moradores">
                    <p:dataTable styleClass="tabela" var="morador" value="#{apartamentoBean.apartamento.moradorList}" style="margin-bottom: 20px;" emptyMessage="Nenhum Morador Cadastrado.">
                        <p:column headerText="Nome">
                            <h:outputText value="#{morador.nome}" />
                        </p:column>

                        <p:column headerText="Identidade">
                            <h:outputText value="#{morador.identidade}" />
                        </p:column>

                        <p:column headerText="Org. Exp.">
                            <h:outputText value="#{morador.orgaoExpedidor}" />
                        </p:column>

                        <p:column headerText="Nascimento">
                            <h:outputText value="#{morador.nascimento}" />
                        </p:column>

                        <p:column headerText="Telefone">
                            <h:outputText value="#{morador.telefone}" />
                        </p:column>
                    </p:dataTable>

                    <table class="form">
                        <tr>
                            <td>Nome</td>
                            <td>Identidade</td>
                            <td>Org. Exp.</td>
                            <td>Nascimento</td>
                            <td colspan="2">Telefone</td>
                        </tr>
                        <tr>
                            <td class="input-container"><h:inputText class="input" value="#{apartamentoBean.morador.nome}" id="moradorNome" /></td>
                            <td class="input-container" style="width: 100px;"><h:inputText class="input" value="#{apartamentoBean.morador.identidade}" id="moradorIdentidade" /></td>
                            <td class="input-container" style="width: 60px;"><h:inputText class="input" value="#{apartamentoBean.morador.orgaoExpedidor}" id="moradorOrgExp" /></td>
                            <td class="input-container small"><h:inputText class="input data" value="#{apartamentoBean.morador.nascimento}" id="moradorNascimento" /></td>
                            <td class="input-container" style="width: 100px;"><h:inputText class="input telefone" value="#{apartamentoBean.morador.telefone}" id="moradorTelefone" /></td>
                            <td class="input-container small" style="padding-right: 0;">
                                <p:commandButton value="Adicionar" actionListener="#{apartamentoBean.adicionarMorador()}" update="moradores" process="moradorNome,moradorIdentidade,moradorOrgExp,moradorNascimento,moradorTelefone" />
                            </td>
                        </tr>
                    </table>
                </h:panelGroup>

            </div>
        
            <div class="form-buttons">
                <p:commandButton actionListener="#{apartamentoBean.salvar()}" value="Salvar" update=":formListar,:formSalvar" style="margin-right: 10px;" />

                <p:commandButton actionListener="#{apartamentoBean.voltar()}" value="Voltar" update=":formListar,:formSalvar" process="@this" />
            </div>
        </h:panelGroup>
    </h:form>
</ui:composition>

Tenta assim:

&lt;p:commandButton actionListener="#{apartamentoBean.salvar()}" value="Salvar" update="@form" style="margin-right: 10px;" /&gt; 

ou

&lt;p:commandButton actionListener="#{apartamentoBean.salvar()}" value="Salvar" update="@form, :formSalvar" style="margin-right: 10px;" /&gt; 

Isso me parece ser um problema de escopo de sessão, inclusive já tive problemas semelhantes. Tem que tomar cuidado quando inserir componentes com action (commandButton, commandLink e derivados) dentro de componentes que trabalham com coleções (dataGrid, ring, dataTable, ui:repeat) porque ao fazer a requisição a lista já está vazia.

Se você colocar em sessionScoped deve funcionar, ou mude seu método do get para montar novamente a lista se ela for nula.

Segue dois links que explicam mais profundamente:


Depois de muitos testes encontrei a origem do problema.
O problema é o campo do tipo Date, se eu tirar o id desse campo do submit, tudo vai certinho mas se coloco o botão n envia.
Mas isso ocorreu pq eu me esqueci de de colocar o converter. Só treinando mesmo para n errar.
Vlw por vcs terem me respondido. =D

<td class="input-container small"><h:inputText class="input data" value="#{apartamentoBean.morador.nascimento}" id="moradorNascimento" /></td>