1
resposta

Filter by com paginação primefaces

Pessoal

Estou usando um filter by em uma tabela com paginação, quando filtro funciona corretamente, aos a exibição eu limpo o campo do filtro e aparece somente a primeira pagina da paginação, nas outras os dados somem, se eu tirar a paginação funciona corretamente. Para voltar todos os dados tenho que recarregar a pagina.

<p:messages id="messages" /> <p:fieldset legend="Dados do Livro">

            <p:panelGrid columns="2">

                <p:outputLabel value="Titulo:" for="titulo" />
                <p:inputText id="titulo" value="#{livroBean.livro.titulo}"
                    required="true" requiredMessage="Titulo Obrigatório"
                    validatorMessage="Titulo não pode mais que 40 caracteres">
                    <f:validateLength maximum="40" />
                    <f:ajax event="blur" render="messages" />
                </p:inputText>

Alguém tem uma solução para este problema?

1 resposta

Olá, tudo certo?

O problema que você está enfrentando ocorre porque a tabela com paginação do PrimeFaces mantém o estado da página atual e do filtro apenas no lado do cliente. Quando você limpa o campo de filtro, a tabela continua exibindo apenas os dados que correspondem ao filtro anteriormente aplicado na página atual.

Para resolver esse problema, você pode usar o atributo filterValue do componente <p:datatable> para manter o valor do filtro no lado do servidor. Dessa forma, quando você limpar o campo de filtro, o valor do filtro no servidor também será limpo e a tabela será atualizada corretamente.

Aqui está um exemplo de como usar o filterValue:

<p:datatable value="#{livroBean.livros}" var="livro" rows="10" paginator="true"
    rowsPerPageTemplate="5,10,15" filteredValue="#{livroBean.livrosFiltrados}"
    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
    paginatorPosition="bottom">

    <p:column headerText="Título" filterBy="#{livro.titulo}" filterMatchMode="contains">
        <p:outputLabel value="#{livro.titulo}" />
    </p:column>

    <!-- Outras colunas... -->

</p:datatable>