PageHelper.java
/**
*
*/
package com.luckystone.util;
import java.util.List;
/**
*
* @author hh
*
*/
public class PageHelper
{
// 总共的数据量
private int total;
// 每页显示多少条
private int pageSize;
// 共有多少页
private int totalPage;
// 当前是第几页
private int index;
// 数据
private List<?> data;
// 连接路径
private String path = "";
/**
* 页码HTML信息
*/
@SuppressWarnings("unused")
private String pageHTML;
private int startPage; // 开始页面
private int endPage; // 结束页面
private int displayNum = 5; // 显示的页数
/**
* @return the startPage
*/
public int getStartPage()
{
return startPage;
}
/**
* @return the endPage
*/
public int getEndPage()
{
return endPage;
}
/**
* @return the path
*/
public String getPath()
{
return path;
}
public void setPageSize(int pageSize)
{
this.pageSize = pageSize;
}
public void setIndex(int index)
{
this.index = index;
}
/**
* 设置路径前缀,页面第一页index为1
*
* @param path
* 此path含有参数形式,如/aa/article?page=,或者/bb/article/list/
*/
public void setPath(String path)
{
this.path = path;
}
public int getPageSize()
{
return pageSize;
}
public int getTotalPage()
{
return (this.total + this.pageSize - 1) / this.pageSize;
}
public int getIndex()
{
return index;
}
public List<?> getData()
{
return data;
}
public void setData(List<?> data)
{
this.data = data;
}
/**
* @return the total
*/
public int getTotal()
{
return total;
}
/**
* @param total
* the total to set
*/
public void setTotal(int total)
{
this.total = total;
}
public String getPageHTML()
{
totalPage = getTotalPage();
StringBuffer displayInfo = new StringBuffer();
if (totalPage != 0 && pageSize != 0)
{
displayInfo.append("<div class='pager'>");
displayInfo.append("<span class='item nolink'>共<span class='num'>" + totalPage + "</span>页/<span class='num'>" + total + "</span>条记录</span>");
//displayInfo.append("<span class='item nolink'>/<span class='num'>" + total + "</span>条记录</span>");
// 判断如果当前是第一页 则“首页”和“第一页”失去链接
if (index <= 1)
{
displayInfo.append("<span class='item nolink'>首页</span>");
displayInfo.append("<span class='item nolink'>上一页</span>");
}
else
{
displayInfo.append("<span class='item'><a href='" + path + "1'>首页</a></span>");
displayInfo.append("<span class='item'><a href='" + path + (index - 1) + "'>上一页</a></span>");
}
countPages();
displayInfo.append("<span class='item nums'>");
for (int i = startPage; i <= endPage; i++)
{
if (i == index)
{
displayInfo.append("<span class='nolink'>" + i + "</span>");
}
else
{
displayInfo.append("<a href='" + path + i + "'>" + i + "</a>");
}
}
displayInfo.append("</span>");
if (index >= totalPage)
{
displayInfo.append("<span class='item nolink'>下一页</span>");
displayInfo.append("<span class='item nolink'>尾页</span>");
}
else
{
displayInfo.append("<span class='item'><a href='" + path + (index + 1) + "'>下一页</a></span>");
displayInfo.append("<span class='item'><a href='" + path + totalPage + "'>尾页</a></span>");
}
displayInfo.append("</div>");
}
return displayInfo.toString();
}
/**
* 计算起始页和结束页
*/
public void countPages()
{
if (index - displayNum / 2 < 1)
{
startPage = 1;
endPage = displayNum > totalPage ? totalPage : displayNum;
}
else if (index + displayNum / 2 > totalPage)
{
int n = totalPage - displayNum + 1;
startPage = n > 0 ? n : 1;
endPage = totalPage;
}
else
{
startPage = index - displayNum / 2;
endPage = startPage + displayNum - 1;
}
}
/**
* @param pageHTML the pageHTML to set
*/
public void setPageHTML(String pageHTML)
{
this.pageHTML = pageHTML;
}
public static void main(String[] args)
{
PageHelper p = new PageHelper();
// p.totalPage = p.getTotalPage();
p.setTotal(1002);
p.setPageSize(20);
p.setPath("/bb/article/list/");
// for (int i = -80; i < 80; i++)
// {
// p.setIndex(i);
// p.countPages();
// System.out.println(i+"----"+p.getStartPage() + "-----" +
// p.getEndPage());
// }
p.setIndex(33);
System.out.println(p.getPageHTML());
}
}
java 调用代码
PageHelper p = new PageHelper();
p.setTotal(productService.getCount(cataId, -1));//此处设置记录的总数
p.setPageSize(Constant.ADMIN_PAGE_SIZE);//此处设置第一页显示多少条记录
p.setIndex(page);//此处设置当前页面值,通常是由request.getParameter("page")取得的。
p.setPath("/aa/product?cataid=55&order_type=1&page=");//此处设置路径前缀,可在前缀中构造其它参数
request.setAttribute("p",p);
jsp 页面显示代码
<!--velocity写法-->
<span class="pager">$p.pageHTML</span>
<!--普通jsp写法,el表达式-->
<span class="pager">${p.pageHTML}</span>
<!--普通jsp写法-->
<span class="pager"><%=((PageHelper)request.getAttribute("p")).getPageHTML()%></span>
分页样式代码
.pager {
text-align: center;
}
.pager a:link {
color: #000;
text-decoration: none;
}
.pager a:hover {
color: #0067B5;
text-decoration: underline;
}
.pager .item,.nums a,.nums .nolink {
margin-left: 5px;
}
.pager .nums {
margin-left: 0;
}
.pager .nolink {
color: #999;
}