私たちは、シームフェイスとCDIを備えたアプリケーションでPrimefaces 3.0.RC2を使用しています。私たちは、コンポーネントのショーケース上の遅延ロードされたデータテーブルの実装に従ってきました。大きなデータセットがあるため、load()メソッドをオーバーライドしてpagewise結果のみを取得しました。 (一度にすべてのレコードをメモリにロードする)。Primefaces - カスタムページネーション/ソートload()issue
ページ分割は期待通りに機能しますが、ソートは機能しません。レコードは、列見出しがクリックされたときに正しくソートされます。以降のすべてのクリックでは、load()メソッドが2回呼び出され、並べ替え順に異なる値が送信されます。その結果、並べ替え順は同じままになります。両方のload()呼び出しがAPPLY_REQUEST_VALUESフェーズで行われているようです。
なぜこのようなことが起こり、どのように避けられるのかについては、誰でも入力することができます。どのポインタも高く評価されます。
追加情報: 前述のように、load()メソッドをオーバーライドして、結果をページワイズにフェッチするようにDBにクエリを実行します(クエリで最大結果と順序を指定します)。
@Override
public List<ABC> load(int first, int pageSize, String sortField, SortOrder
sortOrder, Map<String, String> filters)
{
// Fetch data pagewise from the database
datasource = dao.findPagewiseSortedResults(sortField,
SortOrder.ASCENDING == sortOrder ? true : false, first, pageSize);
// Set the row count
this.setRowCount((int) dao.findTotalCount());
return datasource;
}
ただし、並べ替えのためにデータモデルの列をクリックすると、2つの投稿要求が行われます。
XHTMLコードの下に検索:
<p:dataTable id="dataTable" var="record"
value="#{testBean.lazyModel}" paginator="true" rows="5"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
selectionMode="single" selection="#{testBean.selectedRecord}"
sortBy="#{record.username}">
<p:ajax event="rowSelect" listener="#{testBean.onRowSelect}"
update=":form:display" oncomplete="accountDialog.show()" />
<p:ajax event="colResize" update=":form:growl"
listener="#{testBean.onResize}" />
<p:column sortBy="#{record.username}"
filterBy="#{record.username}">
<f:facet name="header">
<h:outputText value="User Name" />
</f:facet>
<h:outputText value="#{record.username}" />
</p:column>.........
</dataTable>
私たちも最新Primefacesバージョン(3.0.1)にアップグレードしたが、それは助けていません。何かが欠けていますか?どんなポインタも非常に役に立ちます。
ありがとうございました。
私は3.0を使用します。 gと並べ替えることができますが、この動作を見ることはできません。そのようなバグがあったとしても(しかしそうではありません)、あなたはいつもsortOrderフィールドを読んで結果として動作することができます。あなたがいくつかのコード – perissf
@ perissfを投稿した方がいいかもしれません、返信いただきありがとうございます。元の質問にいくつかのコードを追加しました。あなたに情報が必要な場合はお知らせください/ – gkari