PagingResultBean
PagingResultBeanとは?
DBFluteにおけるページング検索で戻されるリスト型の結果オブジェクトです。
会話上では、ぺーじんぐりざるとびーん と表現します。
ListResultBeanを継承
ListResultBean を継承しているため、同様の特徴(例えば、java.util.Listの実装クラスであること)を持っています。 (そのまま for 文でループさせることができます)
e.g. PageRange の利用 {rangeSize=5,fillLimit=true} @Java
PagingResultBean<Member> memberPage = memberBhv.selectPage(cb);
for (Member member : memberPage) { // そのままリストとして扱える
...
}
PagingResultBean であることで変わる ListResultBean の特徴は以下の通りです。
- allRecordCount
- ページングなし総レコード数 (size()と同値ではない)
- selectedList
- ページング実データ
ページング結果の保持
ページング検索の結果に関する情報を保持しています。具体的には、"ページングなし総レコード数"、"ページング実データ" など。さらに、これらを利用して別の情報(総ページ数など)を導出する計算処理を備えています。
基本的なプロパティと計算ロジック
基本的なプロパティと計算ロジック(メソッド)は以下の通りです。
- tableDbName
- 検索の基点となったテーブルの名前 (ListResultBeanより継承)
- allRecordCount
- ページングなし総レコード数 (ListResultBeanより継承)
- selectedList
- ページング実データ (ListResultBeanより継承)
- orderByClause
- 検索時のソート情報 (ListResultBeanより継承)
- pageSize
- 1 ページあたりのレコード数 (検索条件で指定された値)
- currentPageNumber
- 現在のページ番号 (検索条件で指定された値)
- allPageCount
- 総ページ数 (計算)
- isExistPrePage()
- 前のページが存在するか否か (計算)
- isExistNextPage()
- 次のページが存在するか否か (計算)
- prePageNumber
- 前のページ番号 (存在しない場合は例外) (計算)
- nextPageNumber
- 次のページ番号 (存在しない場合は例外) (計算)
- currentStartRecordNumber
- 現在ページの最初のレコード番号 (計算)
- currentEndRecordNumber
- 現在ページの最後のレコード番号 (計算)
e.g. PagingResultBean の基本機能の利用 @Java
PagingResultBean<Member> memberPage = memberBhv.selectPage(cb);
int allRecordCount = memberPage.getAllRecordCount();
int allPageCount = memberPage.getAllPageCount();
if (memberPage.isExistPrePage()) {
int prePageNumber = memberPage.getPrePageNumber();
}
if (memberPage.isExistNextPage()) {
int nextPageNumber = memberPage.getNextPageNumber();
}
ページ番号リンク
ページ番号リンクに関する幾つかの方式に対応した計算ロジックを備えています。
PageGroup
ページングナビゲーションのページ番号リンクの表示方式の一つで、あるまとまった単位の複数ページを一つのグループ として定義し、現在表示しているページが所属しているグループのリンクが表示されるようにする方式です。 例えば、10 ページを一つのグループとした場合で、1 ページ目から 10 ページ目までのどのページを表示していても、ページ番号リンクの表示は変わりません(1 から 10 ページ目までのリンクが表示される)。
"前へ" は、"前のページへのリンク" なのか、"前のグループの最後のページへのリンク" なのか、どちらを意味するものなのかを業務仕様的に明確にする必要があります("次へ" も同様)。どちらか片方だけをサポートするパターンと、(リンク文言を工夫して)両方のリンクを別々に作成するパターンがあります。
e.g. PageGroup の表示 {10 ページを一つのグループ,現在 9 ページ目を表示} @GUI
8 / 23 ページ (453 件)
前へ 1 2 3 4 5 6 7 8 9 10 次へ
e.g. PageGroup の表示 {10 ページを一つのグループ,現在 3 ページ目を表示} @GUI
8 / 23 ページ (453 件)
前へ 1 2 3 4 5 6 7 8 9 10 次へ
e.g. PageGroup の表示 {10 ページを一つのグループ,現在 12 ページ目を表示} @GUI
8 / 23 ページ (453 件)
前へ 11 12 12 13 14 15 16 17 18 19 20 次へ
pageGroupSize を指定し、その後で pageGroup() を呼び出すことで、グループに関する計算ロジックを利用することができます。 業務仕様と実装上の利便性を考慮して、必要なメソッドを利用します。
- buildPageNumberLinkList()
- グループのページ番号リンク情報のリストを作成
- createPageNumberList()
- グループのページ番号の(単なる数値の)リストを作成
- createPageNumberArray()
- グループのページ番号の(単なる数値の)配列を作成
- isExistPrePageGroup()
- 前のグループが存在するか否か
- isExistNextPageGroup()
- 次のグループが存在するか否か
- preGroupNearestPageNumber
- 前のグループの直近の(最後の)ページ番号 (存在しない場合は例外)
- nextGroupNearestPageNumber
- 次のグループの直近の(最初の)ページ番号 (存在しない場合は例外)
e.g. PageGroup の利用 {groupSize=10} @Java
PagingResultBean<Member> memberPage = memberBhv.selectPage(cb);
memberPage.setPageGroupSize(10);
List<PageNumberLink> linkList = memberPage.pageGroup().buildPageNumberLinkList(new PageNumberLinkSetupper<PageNumberLink>() {
public PageNumberLink setup(int pageNumberElement, boolean current) {
String href = ...
return new PageNumberLink().initialize(pageNumberElement, current, href);
}
}
List<Integer> numberList = memberPage.pageGroup().createPageNumberList();
if (memberPage.pageGroup().isExistPrePageGroup()) {
int preNum = memberPage.pageGroup().getPreGroupNearPageNumber();
}
if (memberPage.pageGroup().isExistNextPageGroup()) {
int nextNum = memberPage.pageGroup().getNextGroupNearPageNumber();
}
PageRange
ページングナビゲーションのページ番号リンクの表示方式の一つで、前後 n ページのリンクが表示 されるようにする方式です。ロジックが単純で、GUIユーザも理解しやすいのが特徴です。
"前へ" は、"前のページへのリンク" なのか、"Range 外の前のページへのリンク" なのか、どちらを意味するものなのかを業務仕様的に明確にする必要があります("次へ" も同様)。どちらか片方だけをサポートするパターンと、(リンク文言を工夫して)両方のリンクを別々に作成するパターンがあります。
e.g. PageRange の表示 {前後 5 ページを表示,現在 8 ページ目を表示} @GUI
8 / 23 ページ (453 件)
前へ 3 4 5 6 7 8 9 10 11 12 13 次へ
e.g. PageRange の表示 {前後 5 ページを表示,現在 3 ページ目を表示} @GUI
8 / 23 ページ (453 件)
前へ 1 2 3 4 5 6 7 8 次へ
pageRangeSize を指定し、その後で pageRange() を呼び出すことで、Range に関する計算ロジックを利用することができます。業務仕様と実装上の利便性を考慮して、必要なメソッドを利用します。
- buildPageNumberLinkList()
- Range のページ番号リンク情報のリストを作成
- createPageNumberList()
- Range のページ番号の(単なる数値の)リストを作成
- createPageNumberArray()
- Range のページ番号の(単なる数値の)配列を作成
- isExistPrePageRange()
- 前の Range が存在するか否か (前のRange外にページがあるか否か)
- isExistNextPageRange()
- 次の Range が存在するか否か (次のRange外にページがあるか否か)
- preRangeNearestPageNumber
- 前の Range の直近の(最後の)ページ番号 (存在しない場合は例外)
- nextRangeNearestPageNumber
- 次の Range の直近の(最初の)ページ番号 (存在しない場合は例外)
e.g. PageRange の利用 {rangeSize=5} @Java
PagingResultBean<Member> memberPage = memberBhv.selectPage(cb);
memberPage.setPageRangeSize(5);
List<PageNumberLink> linkList = memberPage.pageRange().buildPageNumberLinkList(new PageNumberLinkSetupper<PageNumberLink>() {
public PageNumberLink setup(int pageNumberElement, boolean current) {
String href = ...
return new PageNumberLink().initialize(pageNumberElement, current, href);
}
}
List<Integer> numberList = memberPage.pageRange().createPageNumberList();
if (memberPage.pageRange().isExistPrePageRange()) {
int preNum = memberPage.pageRange().getPreRangeNearPageNumber();
}
if (memberPage.pageRange().isExistNextPageRange()) {
int nextNum = memberPage.pageRange().getNextRangeNearPageNumber();
}
PageNumberLink は DBFlute が提供しているページ番号リンク情報のクラスです。
fillLimit オプション
前後 n ページという条件に加えて、デザイン的な左右のバランスを整えるために不足ページ分を反対側の表示で埋める オプションがあります。例えば、前後 5 ページを表示する場合で、現在 3 ページ目を表示しているときは、8 ページ目まででなく 11 ページ目(表示しなかったページ数 3 を足している)まで表示されるようになり、リンク数が固定されます。 (但し、そもそも総ページ数が少ない場合は、その分リンク数は少なくなります)
e.g. PageRange の表示 {前後5ページを表示(fillLimit),現在3ページ目を表示} @GUI
8 / 23 ページ (453 件)
前へ 1 2 3 4 5 6 7 8 9 10 11 次へ
PageRangeOption に pageRangeSize と fillLimit を指定し、その後で pageRange() を呼び出すことで、fillLimit を利用した Range に関する計算ロジックを利用することができます。
e.g. PageRange の利用 {rangeSize=5,fillLimit=true} @Java
PagingResultBean<Member> memberPage = memberBhv.selectPage(cb);
PageRangeOption option = new PageRangeOption();
option.setPageRangeSize(5);
option.setFillLimit(true);
memberPage.setPageRangeOption(option);
List<Integer> numberList = memberPage.pageRange().createPageNumberList();
boolean existsPre = memberPage.pageRange().isExistPrePageRange();
boolean existsNext = memberPage.pageRange().isExistNextPageRange();
PageNumberLink
PageGroup, PageRange 共に、buildPageNumberLinkList() を利用することでページングナビゲーションのリンク情報を持った DTO を生成することができます。PageNumberLink は DBFlute が提供しているシンプルな DTO です。プロパティが足りない場合は、このクラスを継承した独自のクラスを指定すると良いでしょう。
e.g. PageRange で PageNumberLink を生成 {rangeSize=5} @Java
PagingResultBean<Member> memberPage = memberBhv.selectPage(cb);
memberPage.setPageRangeSize(5);
List<PageNumberLink> linkList = memberPage.pageRange().buildPageNumberLinkList(new PageNumberLinkSetupper<PageNumberLink>() {
public PageNumberLink setup(int pageNumberElement, boolean current) {
String href = ...
return new PageNumberLink().initialize(pageNumberElement, current, href);
}
}