Подтвердить что ты не робот

Обновление Ajax не работает при использовании фильтра на p: dataTable

У меня есть datable, который включает в себя фильтрующую особенность. Некоторые операции могут выполняться в таблице (например, редактировать). Последовательность данных будет обновлена ​​после завершения работы пользователя с помощью ajax. Он обновляет таблицу напрямую и работает хорошо, если я не фильтрую данные, но, к сожалению, не использую ее и не редактирую.

Как выглядит мой datatable:

    <p:dataTable id="dataTable" var="row"
                value="#{bean.value}"
                filteredValue="#{bean.filteredValue}"
                paginator="true" rows="25" paginatorPosition="bottom"
                rowKey="${row.id}"
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
                editable="true">

и кнопка, которая запускает обновление

<p:commandButton value="Save"
                        actionListener="#{bean.save}"
                        update=":form"/>
4b9b3361

Ответ 1

После обновления datatable вы должны вызвать метод клиентской стороны filter().

<p:dataTable widgetVar="dataTableWidgetVar" id="dataTable" var="row"
             value="#{bean.value}"
             filteredValue="#{bean.filteredValue}"
             paginator="true" rows="25" paginatorPosition="bottom"
             rowKey="${row.id}"
             editable="true">

<p:commandButton value="Save"
                 actionListener="#{bean.save}"
                 update=":form"
                 oncomplete="PF('dataTableWidgetVar').filter()"/>

Для версий PrimeFaces старше 5 используйте

<p:commandButton value="Save"
                 actionListener="#{bean.save}"
                 update=":form"
                 oncomplete="dataTableWidgetVar.filter()"/>

Ответ 2

Добавление ответа для Primefaces 5.x, поскольку они изменили способ вызова виджета var:

Почти так же, как и Kerem Baydogan, но с небольшой модификацией:

<p:commandButton value="Save"
                 actionListener="#{bean.save}"
                 update="@form"
                 oncomplete="PF('dataTableWidgetVar').filter()"/>

Или вы можете очищать фильтры вообще с помощью:

<p:commandButton value="Save"
                 actionListener="#{bean.save}"
                 update="@form"
                 oncomplete="PF('dataTableWidgetVar').clearFilters()"/>

Ответ 3

Для версии простых строк, больших или равных 5, вы можете использовать этот блок кода, он работает очень хорошо

<p:dataTable var="page" value="#{yourBean.allData}" widgetVar="yourWidgetVarName"/>

<p:commandButton value="delete"
                 actionListener="#{yourBean.delete}"
                 update="@form"
                 oncomplete="PF('yourWidgetVarName').filter()"/>

Ответ 4

Если вы используете версию 5 простых понятий, просто создайте класс данных, который представляет собой единую строку данных, чтобы реализовать Serializable