自己写了一个分页
凑合着用
根据前2后3的设定:
当选择了第5页,生成5的前2页和5的后3页,则indexList为: 345678
当选择了第6页,则indexList为: 456789
package com.mtea.shop.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.mtea.shop.util.MathUtil;
/**
* 分页
* @author macrotea
* 2011-3-27
*/
public class Pager implements Serializable{
private static final long serialVersionUID = 1L;
//默认页大小
private static final int DEFALT_PAGE_SIZE=5;
//页码索引限制为5个
private static final int DEFALT_DIPSLAY_LIMIT=5;
//前导限制2
private static final int DEFALT_PREV_LIMIT=2;
//后续限制3
private static final int DEFALT_NEXT_LIMIT=3;
//当前页码
private int pageNumber;
//每页大小
private int pageSize;
//总页数
private int pageTotal;
//总记录数
private int rowTotal;
//数据链表
private List dataList;
//上一页
private int prevPage;
//下一页
private int nextPage;
//第一页
private int firstPage;
//最后一页
private int lastPage;
//页码索引链表
private List<Integer> indexList;
public static void main(String[] args) {
Pager pager=new Pager(12,DEFALT_PAGE_SIZE,56,null);
}
public Pager() {
super();
}
public Pager(int pageNumber, int pageSize, int rowTotal, List dataList) {
super();
this.pageNumber = pageNumber;
this.pageSize = pageSize;
this.rowTotal = rowTotal;
this.dataList = dataList;
extInit();
}
public void extInit(){
/*handle pageTotal*/
this.pageTotal=MathUtil.selfCountByRemainder(rowTotal, pageSize);
/*handle nextPage&prevPage*/
if (this.pageTotal > 0 && this.pageTotal > this.pageNumber) {
this.nextPage = this.pageNumber + 1;
}else{
//当pageNumber太大,则下一页也设置为pageTotal
this.nextPage=pageTotal;
}
if (this.pageNumber > 1&& this.pageTotal >= this.pageNumber) {
this.prevPage = this.pageNumber - 1;
}else{
//当pageNumber==1,则上一页也设置为1
this.prevPage=1;
}
/*handle firstPage&lastPage*/
firstPage=1;
lastPage=pageTotal;
/* handle indexList */
indexList = new ArrayList<Integer>();
if (this.pageTotal >= this.pageNumber && pageNumber >= DEFALT_DIPSLAY_LIMIT) {
// 处理中间情况:前2后3
for (int i = pageNumber - DEFALT_PREV_LIMIT; i < pageNumber; i++) {
System.out.println("处理中间情况:" + i);
indexList.add(i);
}
//处理尾部情况
if (pageTotal - pageNumber >= DEFALT_NEXT_LIMIT) {
for (int i = pageNumber; i <= pageNumber + DEFALT_NEXT_LIMIT; i++) {
System.out.println("处理尾部情况##:" + i);
indexList.add(i);
}
} else {
for (int i = pageNumber; i <= pageTotal; i++) {
System.out.println("处理尾部情况**:" + i);
indexList.add(i);
}
}
}else{
//处理前部情况和不合理的pageNumber
//handle: this.pageTotal < this.pageNumber
//6<88:12345
if(this.pageTotal >=DEFALT_DIPSLAY_LIMIT){
for (int i = 1; i <= DEFALT_DIPSLAY_LIMIT; i++) {
System.out.println("不合理的pageNumber:"+i);
indexList.add(i);
}
//handle: pageNumber < DEFALT_DIPSLAY_LIMIT
//3<5:123
}else{
for (int i = 1; i <= pageTotal; i++) {
System.out.println("处理前部情况:"+i);
indexList.add(i);
}
}
}
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageTotal() {
return pageTotal;
}
public void setPageTotal(int pageTotal) {
this.pageTotal = pageTotal;
}
public void setRowTotal(int rowTotal) {
this.rowTotal = rowTotal;
}
public int getRowTotal() {
return rowTotal;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageNumber() {
return pageNumber;
}
public void setDataList(List dataList) {
this.dataList = dataList;
}
public List getDataList() {
return dataList;
}
public int getPrevPage() {
return prevPage;
}
public void setPrevPage(int prevPage) {
this.prevPage = prevPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public List<Integer> getIndexList() {
return indexList;
}
public void setIndexList(List<Integer> indexList) {
this.indexList = indexList;
}
@Override
public String toString() {
return "当前页=" + pageNumber + "\n每页行数=" + pageSize + "\n页总数=" + pageTotal + "\n行总数=" + rowTotal + "\n上一页=" + prevPage + "\n下一页=" + nextPage
+ "\nindexList:" +indexList;
}
}
jsp页面:
<div id="pager">
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.firstPage"/>">第一页</a>
|
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.prevPage"/>">上一页</a>
(
<span id="pageNumbers">
<s:iterator value="pager.indexList" var="eachIndex">
<%--pageNumber是Action中的int值--%>
<s:if test='%{#eachIndex==pageNumber}'>
<s:property />
</s:if>
<s:else>
<a href="/page/admin/bookCategory_list?pageNumber=<s:property />"><s:property /></a>
</s:else>
</s:iterator>
</span>
)
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.nextPage"/>">下一页</a>
|
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.lastPage"/>">最后一页</a>
(第<s:property value="pageNumber"/>页/共<s:property value="pager.pageTotal"/>页 <s:property value="pager.rowTotal"/>条记录 )
</div>