web-dev-qa-db-ja.com

p:dataTableでフィルターを使用すると、Ajaxの更新が機能しません

プライムフェイスのフィルター機能を含むデータファイルがあります。テーブルに対していくつかの操作を実行できます(例:編集)。ユーザーの操作がajaxを使用して完了すると、データファイルが更新されます。データテーブルをフィルタリングしない場合、テーブルを直接更新し、うまく機能します。残念ながら、使用して編集する場合はそうではありません。

それが私のデータテーブルの様子です:

    <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"/>
27
Johnny2012

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()"/>

5より古いPrimeFacesバージョンの場合は、使用する必要があります

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

Primefaces 5.xの回答を追加しました。ウィジェットvarの呼び出し方法が変更されたためです。

ケレム・ベイドガンの答えとほぼ同じですが、少し修正されています。

<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()"/>
16
Al-Mothafar