我现在被困了几天,试图开发一种在搜索引擎中管理结果页面的方法(就像谷歌分页系统一样).
我有结果总数,当前页面(从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下一页"等等
有人可以帮我吗?
你的问题只是简单的数学.重新编号的方式与您描述的要求不符.
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移动它,这样你点击的数字就在范围的中间.
| 归档时间: |
|
| 查看次数: |
6166 次 |
| 最近记录: |