Обновление 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"/>
Ответы
Ответ 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