分页可简单,可复杂,网上有好多,但是感觉都不太适合自己,所以,这里自己单独整理一个
package tool;
import javax.servlet.http.HttpServletRequest;
/**
* 返回分页字符串类
*
* @author zhuangzi
* @version 2020/03/08
*
*/
public class Pager {
/**
* 生成简单的分页字符串
*
* @param total 总记录数
* @param size 每页记录数
* @param step 最多显示分页页数
* @param page 当前页数
* @param request 请求request
* @return 分页的HTML代码
*/
public static String getPages(int total, int size, int step, int page, HttpServletRequest request, String paramName) {
// 根据request获取当前url,包括参数,如果有已存在名称未paramname的参数,剔除掉,后面会追加新的参数
String url = request.getContextPath() + request.getServletPath();
String query = request.getQueryString();
if (query != null) {
String params = "";
String[] querys = query.split("&");
for (int i = 0 ; i < querys.length ; i ++) {
if (querys[i].startsWith(paramName))
continue;
if (params.equals(""))
params += querys[i];
else
params += "&" + querys[i];
}
if (!params.equals(""))
url += "?" + params;
}
// 结果html
String pages = "";
String urls = "";
if (url.contains("?")) {
urls = url + "&" + paramName;
} else {
urls = url + "?" + paramName;
}
int pageCount = (int) Math.ceil((double) total / size);// 求总页数
if (pageCount == 1) {
return pages;
}
if (page > pageCount) {
page = pageCount;// 如果分页变量大总页数,则将分页变量设计为总页数
}
if (page <= 0) {
page = 1;// 如果分页变量小于1,则将分页变量设为1
}
if(pageCount <= step){
// 总页数 小于 每页显示的数量时, 全部显示
if(pageCount > 1){
for (int i = 1; i <= pageCount; i++) {
if (i != page) {
pages = pages.concat("<a href='" + urls + "=" + i + "'>" + i + "</a>\n");
} else {
pages = pages.concat("<span class='current'>" + i + "</span>\n");
}
}
}
}
else{
// 显示上一页
if (page > 1) {
pages = pages.concat("<a class='prev' href='" + urls + "=" + (page - 1) + "'>上一页</a>\n");
}
// 显示分页码
int beginNum = 1; //起始位置
int perNum = (int) Math.floor((double) step / 2); //每边显示的数目
int endNums = pageCount; // 结束位置初始化为 总页码
if(page <= perNum){ // 如果当前页小于等于 要显示的一半的数目时
beginNum = 1; // 起始位置
endNums = step; // 结束位置
}
else if(page > perNum){
if(page < pageCount - perNum) {
// 如果当前页大于等于 要显示的一半的数目时, 起始位置 直接 page - perNum;
beginNum = page - perNum; // 起始位置
endNums = page + perNum; // 结束位置
}
else {
beginNum = pageCount - step; //开始位置
endNums = pageCount; // 如果结束位置 大于 总页码
}
}
//显示第1页
if (beginNum > 1) {
if (url.contains("?")) {
pages = pages.concat("<a href='" + url + "&" + paramName + "=1'>首页</a> ... \n");
} else {
pages = pages.concat("<a href='" + url + "?" + paramName + "=1'>首页</a> ... \n");
}
}
for (int i = beginNum; i <= endNums; i++) {
if (i != page) {
pages = pages.concat("<a href='" + urls + "=" + i + "'>" + i + "</a>\n");
} else {
pages = pages.concat("<span class='current'>" + i + "</span>\n");
}
}
//显示最后1页
if (endNums < pageCount) {
pages = pages.concat(" ... <a class='prev' href='" + urls + "=" + pageCount + "'>尾页</a>\n");
}
// 显示下一页
if (page < pageCount) {
pages = pages.concat("<a class='prev' href='" + urls + "=" + (page + 1) + "'>下一页</a>\n");
}
}
return pages;
}
}调用如下:
public String selectStudent(
@RequestParam(defaultValue = "1") Integer page ,
@RequestParam(defaultValue="2") Integer pageSize,
Student student, Model model,HttpServletRequest request)
{
PageHelper.startPage(page,pageSize);//开始分页
List<Student> lists = studentService.selectStudent(student);
PageInfo<Student> pageInfo = new PageInfo<Student>(lists);//封装分页数据
int total = (int) pageInfo.getTotal(); //总记录数
int size = pageSize; //每页记录数
int step = 9;
String pages = Pager.getPages(total, size, step, page, request, "page");
model.addAttribute("pageInfo",pageInfo);
model.addAttribute("pages",pages);
return "studentlist";
}显示效果如下:

下载源代码:
