Как обновить и показать количество записей в p: dataTable после фильтра? - PullRequest
0 голосов
/ 10 июля 2020

После фильтрации примитивов «tasksDataTable» «количество записей» не обновляется. Например, до фильтрации количество записей 45, и, фильтруя таблицу, я получаю 3 записи в результате. Но «количество записей» уже 45 (я ожидаю, что после фильтрации я покажу 3 для «количества записей»). Как я могу с этим справиться?

<p:dataTable var="recordEntity"
             id="rulesDataTable"
             widgetVar="rulesDataTable"
             value="#{bossCartable.tasksDataTable}"
             paginator="true"
             paginatorAlwaysVisible="false"
             rows="#{paginationModel.rows}"
             paginatorTemplate="#{paginationModel.paginationTemplate}"
             rowsPerPageTemplate="#{paginationModel.rowsPerPageTemplate}"
             currentPageReportTemplate="#{paginationModel.currentPageReportTemplate}"
             selectionMode="single"
             selection="#{bossCartable.selectedRuleRow}"
             rowIndexVar="rowIndex"
             sortBy="#{recordEntity.id}"
             emptyMessage="No record found!"
             rowKey="#{recordEntity.id}"
             resizableColumns="true"
>

    <f:facet name="header">
        <div class="row align-content-center">
            Tasks
            <h:outputLabel value="number of records: #{bossCartable.tasksDataTable.size()}"/>
        </div>
    </f:facet>

    <p:column headerText="id" width="5%" filterMatchMode="contains"
              filterBy="#{recordEntity.id}" sortBy="#{recordEntity.id}" sortable="true">
        <h:outputText value="#{recordEntity.id}"/>
    </p:column>


    <p:column headerText="description" filterMatchMode="contains"
              filterBy="#{recordEntity.description}">
        <h:outputText value="#{recordEntity.description}"/>
    </p:column>

    <p:column headerText="startDate" width="8%" filterMatchMode="contains"
              filterBy="#{recordEntity.startDate}">
        <h:outputText value="#{recordEntity.startDate}"/>
    </p:column>

    <p:column headerText="endDate" width="8%" filterMatchMode="contains"
              filterBy="#{recordEntity.endDate}">
        <h:outputText value="#{recordEntity.endDate}"/>
    </p:column>


</p:dataTable>

1 Ответ

3 голосов
/ 10 июля 2020

При неленивой загрузке отфильтрованное значение можно сохранить с помощью атрибута filteredValue. Смотрите: https://primefaces.github.io/primefaces/8_0/# / components / datatable

Это позволит вам использовать:

<p:dataTable value="#{bossCartable.tasksDataTable}"
             filteredValue="#{bossCartable.tasksFiltered}"
             ...>
</p:dataTable>

и

#{bossCartable.tasksFiltered.size()}

где tasksFiltered должен указывать на доступный для записи List.

Кроме того, ваш фасет header не будет обновлен magi c, вам следует поместить текст в компонент и обновить этот компонент на filter событие таблицы данных.

См. также:

...