私はPrimeFaces 6.0を使用しています。私は遅延読み込みを使用するデータテーブルを作成しています。私はload
メソッドにthis.setRowCount(count)
を設定しました。私のページネーターは正しく表示されていません(無効な前、次、開始、終了ボタンが表示されます)。PrimeFacesデータテーブルページング機能が最初に遅延ロードで表示されない
テーブルをフィルタリングしたり並べ替えを変更すると、ページが表示されます。ハックを適用せずに作業ページネータを取得する方法について
PF('myTable').clearFilters();
任意のアイデア:私はこのJavaScriptを実行したときにも、ページネータはページを見せていますか?
これは、(関連する属性)私のテーブルです:
<p:dataTable value="#{controller.lazy}"
lazy="true"
var="subitem"
rowKey="#{subitem.id}"
paginator="true" paginatorPosition="bottom"
rows="10"
sortBy="#{subitem.emailAddress}" sortOrder="ascending"
widgetVar="myTable"
>
私の怠惰モデル(関連部分):あなたが外でもLazyDataModel#setRowCount(int n)
を使用して行数を設定する必要がレイジーデータテーブルで
public class LazyDataModel<T> extends org.primefaces.model.LazyDataModel<T>
{
private final QueryBuilder<T> queryBuilder;
private final Class<T> type;
public LazyDataModel(final QueryBuilder<T> queryBuilder, final Class<T> type)
{
this.queryBuilder = queryBuilder;
this.type = type;
}
private void updateRowCount()
{
setRowCount(queryBuilder.count().intValue());
}
@Override
public List<T> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, Object> filters)
{
if (filters != null) {
queryBuilder.addFilters(filters);
}
if (multiSortMeta != null) {
multiSortMeta.forEach(s -> queryBuilder.orderBy(s.getSortField(), s.getSortOrder() == SortOrder.ASCENDING));
}
updateRowCount();
TypedQuery<T> typedQuery = queryBuilder.createQuery();
typedQuery.setMaxResults(pageSize);
typedQuery.setFirstResult(first);
return typedQuery.getResultList();
}
@Override
public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters)
{
List<SortMeta> multiSortMeta = null;
if (sortField != null && sortOrder != null) {
multiSortMeta = Arrays.asList(new SortMeta(null, sortField, sortOrder, null));
}
return load(first, pageSize, multiSortMeta, filters);
}
}