java中的分页

use*_*307 1 java pagination

我现在被困了几天,试图开发一种在搜索引擎中管理结果页面的方法(就像谷歌分页系统一样).

我有结果总数,当前页面(从1 ...开始到...最后一页),以及每页的结果数(假设每页10个).

在JSP结果页面的底部,我想显示页面的表格数据,如下所示:

假设搜索引擎返回了470个结果. - 基于"每页10个结果",我们总共有47页(470/10)

这就是我想要展示的内容

"上一页2 3 4 5 6 7 8 9 10下一页">当我们点击第10页时,这是应该发生的事情:

"上一页5 6 7 8 9 10 11 12 13 14下一步"如果单击第14页,则:

"上一页9 10 11 12 13 14 15 16 17 18下一页"等等......

我设法做了以下事情

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;
}
}
Run Code Online (Sandbox Code Playgroud)

但是我的代码是这样的:

"1 2 3 4 5 6 7 8 9 10下一页"如果我点击第10页>"上一页11 12 13 14 15 16 17 18 19 20下一页"等等

有人可以帮我吗?

jef*_*eff 5

你的问题只是简单的数学.重新编号的方式与您描述的要求不符.

 vPremierNumero = (pNumberCurrentPage / NB_PAGES_INTERVAL - 1) * NB_PAGES_INTERVAL
Run Code Online (Sandbox Code Playgroud)

所以让我们插上一些数字

 pNumberCurrentPage = 10
 NB_PAGES_INTERVAL = 10

 vPremierNumero = 10/9 * 10 = 100/9 = 11
Run Code Online (Sandbox Code Playgroud)

这就是为什么你的第一页是11.你想要通过NB_PAGES_INTERVAL/2移动它,这样你点击的数字就在范围的中间.