Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Primefaces Datatable com filtro não atualiza dados

Olá Pessoal , tenho uma tabela com um filtro no campo nome, e um botão excluir a linha, quando o filtro está preenchido e mando excluir, é feita a exclusão recarrego a lista, mas na tela não é atualizado.

<p:dataTable id="tabelaGrupos"
                            value="#{grupoFornecedorBean.listaGruposDeFornecedores}"                 
                            var="grupoFornecedor" paginator="true" rows="10"
                            paginatorPosition="bottom"
                            paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
                            currentPageReportTemplate="( {currentPage} de {totalPages} )"
                            sortMode="multiple"
                            tableStyleClass="table table-bordered table-hover"
                            rowStyleClass="full-height-row"
                            emptyMessage="#{messages['launches.sem.registro']}"
                            rendered="#{not empty grupoFornecedorBean.listaGruposDeFornecedores}">

                            <p:column headerText="ID" sortBy="#{grupoFornecedor.id}">
                                <h:outputText value="#{grupoFornecedor.id}" />
                            </p:column>

                            <p:column headerText="Nome" sortBy="#{grupoFornecedor.nome}"
                                filterBy="#{grupoFornecedor.nome}" style="text-align:left;">
                                <h:outputText value="#{grupoFornecedor.nome}" />
                            </p:column>

                            <p:column headerText="Ação" width="9%" style="text-align:center;">
                                <p:commandButton styleClass="btn-unstyled" update="formGrupo"
                                    process="@this"
                                    action="#{grupoFornecedorBean.carregarGrupo(grupoFornecedor)}"
                                    icon="fa-edit" />

                                <p:commandButton id="apagaGrupo" styleClass="btn-unstyled"
                                    icon="fa-remove" title="Apaga esse grupo"
                                    action="#{grupoFornecedorBean.excluirGrupo(grupoFornecedor)}"
                                    ajax="true" process="@this" update="formTabelaGrupos"
                                    immediate="true" onstart="PF('loadingBlock').block()"
                                    oncomplete="PF('loadingBlock').unblock()" />
                            </p:column>
                        </p:dataTable>

e no meu bean

@PostConstruct
    public void init() {
        grupoFornecedor = new GrupoFornecedorVO();
        buscarGrupos();        
    }


    private void buscarGrupos() {
        iniciaListaGruposDeFornecedores();
        listaGruposDeFornecedores = this.grupoFornecedorService.listaTodos();
    }

    private void iniciaListaGruposDeFornecedores() {
        listaGruposDeFornecedores = null;
    }


    public boolean excluirGrupo(GrupoFornecedorVO grupoFornecedor) {
         boolean result =  this.grupoFornecedorService.remove(grupoFornecedor);
         if(!result) {
             addErrorMessage( "Não é possivel excluir esse grupo, verifique se existe um fornecedor vinculado a esse grupo " + grupoFornecedor.getNome());
                result = false;
         } else {
             init();
             result = true;
         }
        return result;
    }
1 resposta
solução

Resolvido - Foi criado uma lista para representar quando o filtro for utilizado.

na class Bean

private List<?> listaFiltrada;

no datatable

na tela no datatable
filteredValue="#{meuBean.listaFiltrada}"

no método salvar

if(listaFiltrada != null) {
                listaFiltrada.add(xxxx);                
            }

no método excluir

if(listaFiltrada != null) {
                listaFiltrada.remove(xxx);
            }

}