検索エンジンで結果のページを管理する方法を開発しようとして、数日間立ち往生しています(Googleのページネーションシステムと同じように)。
結果の総数、現在のページ (1 ~ 最後のページ)、および 1 ページあたりの結果数 (1 ページあたり 10 としましょう) があります。
JSP 結果ページの下部に、次のようにページの表形式のデータを表示したいと考えています。
検索エンジンが 470 件の結果を返したとします。- 「1 ページあたり 10 件の結果」に基づいて、合計 47 ページ (470 / 10) になります。
表示したいのはこれ
"previous 2 3 4 5 6 7 8 9 10 Next" > 10 ページ目をクリックすると、次のようになります。
「前へ 5 6 7 8 9 10 11 12 13 14 次へ」 14 ページをクリックすると、次のようになります。
「前へ 9 10 11 12 13 14 15 16 17 18 次へ」 ans so on...
私は次のことを行うことができました
public class Test {
public static int [] getIntervalNumberPages(
final int pNumberHits,
final int pNumberTotalHits,
final int pNumberCurrentPage,
final int pNumberResultsPerPage) {
// Page interval
final int NB_PAGES_INTERVAL = 10;
// Initialise table
int [] vResult = new int [0];
// If no results found or if number of documents per page = 0
if (pNumberHits != 0 && pNumberResultsPerPage != 0) {
// Total number of pages
int vNumberTotalPages = (int) java.lang.Math.ceil(pNumberTotalHits / (double) pNumberResultsPerPage);
// First number of the list
int vPremierNumero = 0;
// Last number of the list
int vDernierNumero = 0;
// managing multiples
if (pNumberCurrentPage >= NB_PAGES_INTERVAL && pNumberCurrentPage % NB_PAGES_INTERVAL == 0) {
vPremierNumero = (pNumberCurrentPage / NB_PAGES_INTERVAL - 1) * NB_PAGES_INTERVAL + 1;
vDernierNumero = java.lang.Math.min(vNumberTotalPages, (pNumberCurrentPage / NB_PAGES_INTERVAL - 1) * NB_PAGES_INTERVAL + NB_PAGES_INTERVAL);
} else {
vPremierNumero = pNumberCurrentPage / NB_PAGES_INTERVAL * NB_PAGES_INTERVAL + 1;
vDernierNumero = java.lang.Math.min(vNumberTotalPages, pNumberCurrentPage / NB_PAGES_INTERVAL * NB_PAGES_INTERVAL + NB_PAGES_INTERVAL);
}
vResult = new int [vDernierNumero - vPremierNumero + 1];
// Fill in table
for (int vCpt = 0; vCpt < vResult.length; vCpt++) {
vResult [vCpt] = vPremierNumero + vCpt;
}
}
return vResult;
}
}
ただし、私のコードは次のように機能します。
10ページをクリックすると「1 2 3 4 5 6 7 8 9 10 次へ」 > 「前へ 11 12 13 14 15 16 17 18 19 20 次へ」など
誰かが私を助けてくれますか??