package com.levelcoder.paging;
/**
*
* 描述:分页接口
*
* 作者: LevelCoder
*
* 日期:2016年12月13日 下午1:49:01
*
* 版本: 1.0
*/
public interface IPageList<Entity> {
/**
* 计算总记录数
*
* @return
*/
public int getItemCount();
/**
* 获取当前页码
* @return
*/
public int getPageIndex();
/**
* 每页显示的记录数量
*
* @return
*/
public int getPageSize();
/**
* 计算总页数.
*
* @return
*/
public int getPageCount();
/**
* 获取是否有上一页
* @return
*/
public boolean getHasPre();
/**
* 获取是否有下一页
* @return
*/
public boolean getHasNext();
public String resolveUrl(String url, String queryString, Integer pageNo, Integer pageSize);
}
package com.levelcoder.paging;
import java.util.List;
/**
*
* 描述:分页类实现
*
* 作者: LevelCoder
*
* 日期:2016年12月13日 下午1:49:10
*
* 版本: 1.0
*/
public class PageList<Entity> implements IPageList<Entity>{
/**
* 总记录数
*/
private int itemCount;
/**
* 当前页码
*/
private int pageIndex;
/**
* 每页显示记录数
*/
private int pageSize;
/**
* 总页数
*/
private int pageCount;
/**
* 是否首页
*/
private boolean hasPre;
/**
* 是否尾页
*/
private boolean hasNext;
/**
* 数据内容
*/
private List<Entity> items;
public PageList(int itemCount, int pageIndex, int pageSize, List<Entity> items) {
this.itemCount = itemCount;
this.pageSize = pageSize;
this.pageCount=(itemCount % pageSize == 0) ? itemCount/pageSize :itemCount/pageSize+1;
this.pageIndex=pageIndex>pageCount?pageCount:pageIndex;
this.hasPre=pageIndex>1;
this.hasNext=pageIndex<pageCount;
if (items != null)
this.items = items;
}
public int getItemCount() {
return this.itemCount;
}
public int getPageIndex(){
return this.pageIndex;
}
public int getPageSize() {
return this.pageSize;
}
public int getPageCount() {
return this.pageCount;
}
public boolean getHasPre(){
return this.hasPre;
}
public boolean getHasNext(){
return this.hasNext;
}
public List<Entity> getItems(){
return this.items;
}
public String resolveUrl(String url, String queryString, Integer pageNo, Integer pageSize){
if(queryString==null)
queryString=new String();
else
queryString=queryString.replaceAll("&pageNo=\\d*", "").replaceAll("pageNo=\\d*", "").replaceAll("&pageSize=\\d*", "").replaceAll("pageSize=\\d*", "");
if(pageNo!=null)
queryString=queryString.isEmpty()?"pageNo="+pageNo.toString():queryString+"&pageNo="+pageNo.toString();
if(pageSize!=null)
queryString=queryString.isEmpty()?"pageSize="+pageSize.toString():queryString+"&pageSize="+pageSize.toString();
return queryString.isEmpty()?url:url+"?"+queryString;
}
}
package com.levelcoder.paging;
import java.util.List;
/**
*
* 描述:分页工具类
*
* 作者: LevelCoder
*
* 日期:2016年12月13日 下午1:49:21
*
* 版本: 1.0
*/
public class PageListUtil {
/**
* 默认的起始页
*/
public static final int DEFAULT_PAGE_NO=1;
/**
* 默认的分页显示数量
*/
public static final int DEFAULT_PAGE_SIZE=20;
public static final String PAGE_NO_NAME="pageNo";
public static final String PAGE_SIZE_NAME="pageSize";
/**
* 不关心总记录数
* @param pageNumber
* @param pageSize
* @return
*/
public static int getPageListStart(int pageNumber, int pageSize) {
return (pageNumber - 1) * pageSize;
}
/**
* 计算分页获取数据时游标的起始位置
* @param totalCount
* @param pageNumber
* @param pageSize
* @return
*/
public static int getPageListStart(int totalCount, int pageNumber, int pageSize) {
int start = (pageNumber - 1) * pageSize;
if (start >= totalCount)
start = 0;
return start;
}
/**
* 构造分页对象
* @param totalCount
* @param pageIndex
* @param items
* @param pageSize
* @return
*/
public static <Entity> PageList<Entity> getPageList(int totalCount, int pageIndex, List<Entity> items, int pageSize) {
return new PageList<Entity>(totalCount, pageIndex, pageSize, items);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
import="com.levelcoder.paging.IPageList"
import="com.levelcoder.paging.PageListUtil"
import="org.apache.taglibs.standard.tag.common.core.UrlSupport"%>
<%
String urlAddress=request.getParameter("urlAddress");
String pageModelName= request.getParameter("pageModelName");
Integer pageCount=(request.getParameter("pageCount")!=null&&!request.getParameter("pageCount").isEmpty())?Integer.valueOf(request.getParameter("pageCount")):10;
%>
<div class="row">
<%
if(pageModelName==null || pageModelName.isEmpty()){%>
未获取到分页标识!
<%}
else if(urlAddress==null || urlAddress.isEmpty()){%>
未获取到url地址!
<%}
else if(pageCount<10){%>
分页数量不能小于10!
<%}
IPageList<?> pageModel = (IPageList<?>)request.getAttribute(pageModelName);
if(pageModel==null){%>
未获取到分页内容!
<%}
else{%>
<div class="col-md-5 col-sm-12">
<div class="dataTables_info">(每页显示<%=pageModel.getPageSize() %>条,共 <%=pageModel.getItemCount() %> 条记录)</div>
</div>
<div class="col-md-7 col-sm-12">
<div class="dataTables_paginate paging_bootstrap">
<ul class="pagination">
<%String queryString=request.getQueryString();
urlAddress = UrlSupport.resolveUrl(urlAddress, null, pageContext);
if (pageModel.getHasPre()) {
String preUrl = pageModel.resolveUrl(urlAddress, queryString, pageModel.getPageIndex() - 1, null);%>
<li class="prev">
<a href="<%=preUrl%>">上一页</a>
</li>
<%}
else{%>
<li class="prev disabled">
<span>上一页</span>
</li>
<%}
if(pageModel.getPageCount()<=pageCount){
for(int i=1;i<=pageModel.getPageCount();i++){
if(i==pageModel.getPageIndex()){%>
<li class="active"><a href="#"><%=i %></a></li>
<%}
else{
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, i, null);%>
<li><a href="<%=pageUrl%>"><%=i %></a></li>
<%}
}
}
else{
for(int i=1;i<=pageCount;i++){
if(pageModel.getPageIndex()<=pageCount/2){
if(i==pageModel.getPageIndex()){%>
<li class="active"><a href="#"><%=i %></a></li>
<%}
else if(pageCount-i>2){
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, i, null);%>
<li><a href="<%=pageUrl%>"><%=i %></a></li>
<%}
else if(i==pageCount-2){%>
<li><span>...</span></li>
<%}
else{
int pageNo=pageModel.getPageCount()-(pageCount-i);
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
}
else if(pageModel.getPageCount()-pageModel.getPageIndex()<pageCount/2){
if(i<3){
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, i, null);%>
<li><a href="<%=pageUrl%>"><%=i %></a></li>
<%}
else if(i==3){%>
<li><span>...</span></li>
<%}
else{
int pageNo=pageModel.getPageCount()-(pageCount-i);
if(pageNo==pageModel.getPageIndex()){%>
<li class="active"><a href="#"><%=pageNo %></a></li>
<%}
else{
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
}
}
else{
if(i<3){
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, i, null);%>
<li><a href="<%=pageUrl%>"><%=i %></a></li>
<%}
else if(i==3 || i==pageCount-2){%>
<li><span>...</span></li>
<%}
else if(i>pageCount-2){
int pageNo=pageModel.getPageCount()-(pageCount-i);
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
else{
if(pageCount%2==0)
{
if(i==pageCount/2){%>
<li class="active"><a href="#"><%=pageModel.getPageIndex() %></a></li>
<%}
else if(i<pageCount/2){
int pageNo=pageModel.getPageIndex()-(pageCount/2-i);
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
else{
int pageNo=pageModel.getPageIndex()+(i-pageCount/2);
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
}
else{
if(i==(pageCount+1)/2){%>
<li class="active"><a href="#"><%=pageModel.getPageIndex() %></a></li>
<%}
else if(i<(pageCount+1)/2){
int pageNo=pageModel.getPageIndex()-((pageCount+1)/2-i);
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
else{
int pageNo=pageModel.getPageIndex()+(i-(pageCount+1)/2);
String pageUrl = pageModel.resolveUrl(urlAddress, queryString, pageNo, null);%>
<li><a href="<%=pageUrl%>"><%=pageNo %></a></li>
<%}
}
}
}
}
}
if (pageModel.getHasNext()) {
String nextUrl = pageModel.resolveUrl(urlAddress, queryString, pageModel.getPageIndex() + 1, null);%>
<li class="next">
<a href="<%=nextUrl %>">下一页</a>
</li>
<%}
else{%>
<li class="next disabled">
<span>下一页</span>
</li>
<%}%>
</ul>
</div>
</div>
<%}%>
</div>
测试写法
/**
* 用户列表
* @param model
* @return
* @throws Exception
*/
@RequestMapping(value="/list",method=RequestMethod.GET)
public String userList(Model model,HttpServletRequest request,UserVO user) throws Exception{
model.addAttribute("searchModel", user);
Map<String,Object> map = ConverterUtil.objectToMap(user);
List<UserEntity> userList = userService.querList(map);
#主要实现分页接口调用
PageList<UserEntity> pageList =PageListUtil.getPageList(10600, 1, userList, 20);
model.addAttribute("contentModel", pageList);
return "/user/list";
}
实现效果