[RESOLVIDO]Datatable primefaces não atualiza após ação

Pessoal,

Gostaria de ajuda de vocês, já pesquisei aqui e em diversos fóruns mas após passar uma tarde toda sem sucesso resolvi abrir o tópico. Estou tentando atualizar um datatable após a ação de um botão mas o mesmo não funciona de jeito nenhum, já tentei várias formas mas ele executa a ação e não atualiza o datatable, segue a forma atual do código:

 <h:form id="form-negocios2">
                
                <p:ajaxStatus onstart="PF('statusDialog').show()" onsuccess="PF('statusDialog').hide()" />
                <p:dialog widgetVar="statusDialog" modal="true" draggable="false" closable="false" resizable="false" showHeader="false">
                    <p:graphicImage library="imagens" name="ajax-loader.gif" />
                </p:dialog>
                
                <p:dataTable id="datatable-negocios" 
                             value="#{negocioBean.listaOtimizada}" 
                             var="negocio"
                             rowIndexVar="rowIndex"
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {Exporters}"
                             paginatorPosition="bottom"
                             paginator="true"
                             rows="10"
                             emptyMessage="Sem resultados"
                             reflow="true">
                    <p:column headerText="" width="15" exportable="false">
                        <h:outputText value="#{rowIndex+1}" />
                    </p:column>
                    <p:column headerText="Nome" width="110" exportable="true">
                        <h:outputText value="#{negocio.idcliente.idpessoa.nomeGenerico}" />
                    </p:column> 
                    
                    <p:column width="30" exportable="false">
                        <p:commandButton icon="ui-icon-circle-check" actionListener="#{negocioBean.atualizarStatusEmissao(true, negocio.idnegocio)}" title="Emitido" update="datatable-negocios" ajax="false" process="@form" onstart="PF('statusDialog').show()" oncomplete="PF('statusDialog').hide()" />
                        <p:commandButton icon="ui-icon-circle-minus" actionListener="#{negocioBean.atualizarStatusEmissao(false, negocio.idnegocio)}" title="Não emitido" update="datatable-negocios" ajax="false" process="@form" onstart="PF('statusDialog').show()" oncomplete="PF('statusDialog').hide()" />
                    </p:column>
                    <p:column width="23" exportable="false">
                        <p:commandButton update="" icon="ui-icon-search" action="#{negocioBean.obterPgFormNegocio()}" actionListener="#{negocioBean.carregarNegocio(negocio.idnegocio)}" title="Visualizar" ajax="true" immediate="false" />
                    </p:column> 
             </p:dataTable>                    
            </h:form>

Tente isso:

<p:commandButton icon="ui-icon-circle-check" actionListener="#{negocioBean.atualizarStatusEmissao(true, negocio.idnegocio)}" title="Emitido" update=":form:datatable-negocios" ajax="false" process="@form" onstart="PF('statusDialog').show()" oncomplete="PF('statusDialog').hide()" />

Tentei diversas formas já, já tentei da forma que você falou “:form:datatable-negocios” e da forma direta “datatable-negocios” pois usei o prependId=“false” no formulário pai, nenhuma funciona, impressionante!

Pergunta boba…

você está atribuindo um novo valor a sua lista “negocioBean.listaOtimizada”?

Pode postar o método?

acho que update com ajax=“false” não funciona no primefaces.

E tambem certifique-se que a ação do botão esá atualizando listaOtimizada !

    public void atualizarStatusEmissao(boolean emitido, int idnegocio){
    Integer idCorretora = loginController.getCorretoraLogada().getIdcorretora();        
    negocioDAO.atualizarStatusEmissao(emitido, idnegocio);
    listaOtimizada = negocioDAO.buscarPorVigenciaOtimizado(dataInicio,dataFim, idCorretora, "ASC",60);              
}

Esse é o método que realizo, pelos exemplos que vi deveria funcionar, quando eu aperto “F5” ele carrega a página novamente trazendo os dados corretos, mas só ao apertar o botão.

Pessoal!

Funcionou agora após a sugestão de vocês, o código final ficou:

                        <p:column width="30" exportable="false">
                        <p:commandButton icon="ui-icon-circle-check" actionListener="#{negocioBean.atualizarStatusEmissao(true, negocio.idnegocio)}" title="Emitido" update="datatable-negocios" ajax="false" process="@form" onstart="PF('statusDialog').show()" oncomplete="PF('statusDialog').hide()" />
                        <p:commandButton icon="ui-icon-circle-minus" actionListener="#{negocioBean.atualizarStatusEmissao(false, negocio.idnegocio)}" title="Não emitido" update="datatable-negocios" ajax="false" process="@form" onstart="PF('statusDialog').show()" oncomplete="PF('statusDialog').hide()" />
                    </p:column>

E o método final:

public void atualizarStatusEmissao(boolean emitido, int idnegocio){
Integer idCorretora = loginController.getCorretoraLogada().getIdcorretora();        
negocioDAO.atualizarStatusEmissao(emitido, idnegocio);
listaOtimizada = negocioDAO.buscarPorVigenciaOtimizado(dataInicio,dataFim, idCorretora, "ASC",60);              

}