分页几乎是每个网站都会使用到的技术。所以,在这里,我总结一下分页的方法。
Pager.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ include file="/common/taglibs.jsp"%>
<!-- 分页的三个条件:1,需要得到查询表单的name,2,设置两个隐藏域,一个是当前页,一个是每页显示的条数。3,在需要分页的页面引入pager.jsp页面 -->
<!-- 在该分页的页面当中我们可以看出,分页与对象无关。 -->
<script type="text/javascript">
function jump(p,s){ var oForm = document.searchForm ||
document.forms[0]; oForm.elements["pager.currentPage"].value = p;
oForm.elements["pager.pageSize"].value = s; oForm.submit();
}
</script>
<table width="70%" style="font-size: 14px;font-family: 微软雅黑;"
align="center">
<tr>
<td style="float: left;">
第
<span style="color: red;"><s:property
value="pager.currentPage" /> </span>/
<s:property value="pager.pageCount" />
页 共
<s:property value="pager.total" />
条
</td>
<td style="float: right; ">
<s:if test="pager.currentPage eq 1">
首页
上一页
</s:if>
<s:else>
<a href="javascript:jump(1,document.getElementById('pSize').value)">首页</a>
<a
href="javascript:jump(<s:property value="pager.currentPage-1"/>,document.getElementById('pSize').value)">上一页</a>
</s:else>
<s:if test="pager.currentPage eq pager.pageCount">
下一页
末页
</s:if>
<s:else>
<a
href="javascript:jump(<s:property value="pager.currentPage+1"/>,document.getElementById('pSize').value)">下一页</a>
<a
href="javascript:jump(<s:property value="pager.pageCount"/>,document.getElementById('pSize').value)">末页</a>
</s:else>
转到
<input type="text" id="pPage" style="width:20px"
value="<s:property value="pager.currentPage" />" />
页
<input type="button" value="跳转"
οnclick="jump(document.getElementById('pPage').value,document.getElementById('pSize').value)" />
每页显示
<s:select name="pager.pageSize" list="{3,5,10,15,20,50 }" id="pSize"
οnchange="jump(1,this.value)"></s:select>
</td>
</tr>
</table>
Pager.java
package com.hfxt.common;
import java.util.ArrayList;
import java.util.List;
public class Pager<T> {
// The number of current page size
private int currentPage;//当前页
// The number of records in one page
private int pageSize;//页面要显示多少条数据
// The total number of records in DB
private int total;//数据的总数
// The total number of page
private int pageCount;//页面的总数
// The number where we begin to get record
private int startRecord;
// Whether it has previous page
private boolean hasPreviousPage;
// Whether it has next page
private boolean hasNextPage;
// Whether it has only one page
private boolean onlyOnePage;
// The records of page designed
private List<T> pageRecords;//页面数据的集合
public int getCurrentPage() {
return currentPage;
}
/**
* 构造方法,只构造空页.
*/
public Pager() {
this(1, 0, 3, new ArrayList());
}
/**
* 构造方法,只构造空页.
*/
public Pager(int currentPage,int pageSize) {
this(currentPage, 0, pageSize, new ArrayList());
}
/**
* 默认构造方法.
*
* @param start
* 本页数据在数据库中的起始位置
* @param totalSize
* 数据库中总记录条数
* @param pageSize
* 本页容量
* @param data
* 本页包含的数据
*/
public Pager(int currentPage, int totalSize, int pageSize, List data) {
this.pageSize = pageSize;
this.currentPage = currentPage;
this.total = totalSize;
this.pageRecords = data;
}
/**
* make sure the page is in the range of the total pages
*
* @param currentPage
* current page
*/
public void setCurrentPage(int currentPage) {
if (currentPage < 1) {
this.currentPage = 1;
return;
}
/*if (currentPage > getPageCount()) {
this.currentPage = getPageCount();
return;
}*/
this.currentPage = currentPage;
}
/**
* get page size
*
* @return page size number
*/
public int getPageSize() {
return pageSize;
}
/**
* set page size
*
* @param pageSize
* page size number
*/
public void setPageSize(int pageSize) {
if (pageSize <= 0) {
this.pageSize = 1;
} else {
this.pageSize = pageSize;
}
}
/**
* get total records
*
* @return total record's number
*/
public int getTotal() {
return total;
}
/**
* set total records
*
* @param totalRecords
* total record number
*/
public void setTotal(int totalRecords) {
this.total = totalRecords;
}
/**
* Get the total count of the page
*
* @return count number
*/
public int getPageCount() {
// If there is no data in database.
if (total == 0) {
pageCount = 1;
return pageCount;
}
boolean isZero = total % pageSize == 0;
pageCount = total / pageSize;
pageCount = isZero ? pageCount : pageCount + 1;
return pageCount;
}
/**
* First record of one page
*
* @return start records
*/
public int getStartRecord() {
startRecord = ((currentPage - 1) * pageSize);
return startRecord;
}
/**
* Whether has previous page
*
* @return if previous page's is exist,return true else not
*/
public boolean isHasPreviousPage() {
hasPreviousPage = (currentPage == 1) ? false : true;
return hasPreviousPage;
}
/**
* Whether has next page
*
* @return if next page's is exist,return true else not
*/
public boolean isHasNextPage() {
hasNextPage = (currentPage == getPageCount()) ? false : true;
return hasNextPage;
}
/**
* Whether is only one page
*
* @return if only one page,return true else not
*/
public boolean isOnlyOnePage() {
onlyOnePage = ((getPageCount() == 1) ? true : false);
return onlyOnePage;
}
/**
* 查询到的所有的记录
* @return the pageRecords
*/
public List<T> getPageRecords() {
return pageRecords;
}
public void setPageRecords(List<T> pageRecords) {
this.pageRecords = pageRecords;
}
}