JSF(データテーブル)の実際のページネーションに役立つコンポーネントを探すために、オムニフェイスのショーケースを検索しましたが、成功しませんでした。
あるのか知っていますか?
それは素晴らしい機能です。
https://rogerkeays.com/blog/paging-large-data-sets-with-a-lazylistで取ったアプローチに少し取り組み、以下のコードを用意しました。
これは非常に汎用的で、任意の JSF コンポーネント ライブラリまたは永続化 API で使用できます。
開発者は、クエリを実行するためにビジネス ファサードまたはエンティティ マネージャにアクセスできる JSF マネージド Bean (バッキング Bean) に遅延リストを実装する必要があります。
import java.util.AbstractList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class AbstractLazyList extends AbstractList {
/**
* Current page cache.
*/
private final Map<Integer, Object> currentPage = new HashMap<Integer, Object>();
/**
* Page size. Default 50.
*/
private int pageSize = 50;
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
@Override
public Object get(int index) {
if (currentPage.containsKey(index)) {
return currentPage.get(index);
}
queryNewPage(index);
return currentPage.get(index);
}
/**
* Clears cache and queries new page's itens.
*
* @param firstItemIndex
* first item index
*/
private void queryNewPage(int firstItemIndex) {
currentPage.clear();
final List<Object> pageResults = queryNextPage(firstItemIndex, pageSize);
for (int j = 0; j < pageResults.size(); j++) {
currentPage.put(firstItemIndex + j, pageResults.get(j));
}
}
@Override
public int size() {
return queryResultsSize();
}
/**
* Queries next page itens.
*
* @param firstRowIndex
* first row index
* @param pageSize
* maximum resuts of the query
* @return list of results
*/
protected abstract List<Object> queryNextPage(int firstRowIndex,
int pageSize);
/**
* Counts the total results of the query.
*
* @return query's total results
*/
protected abstract int queryResultsSize();
}
}
たぶん、このようなアプローチはオムニフェイスに適合する可能性があります.