java 实现分页插件

 

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";
	}
	

 

实现效果

182918_lsE2_2296021.png

 

转载于:https://my.oschina.net/LevelCoder/blog/1499772

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值