1.SQL数据库语言实现分页
语法:select 列名|* from 表名 limit N,M;
N:代表开始分页的记录序号。
M:代表一页内的记录条数。
例:select * from customer limit 0,2;
表示从customer表中的第一条记录开始分页,每页有两条记录。
2.使用Page对象封装相关属性便于web层页面显示
代码实现:
package domain;
import java.util.List;
public class Page {
private List<Customer>list;//存放一个页面内的所有记录
private int totalpage;//总的分页页面数
private String url;//指定控制分页页面的Servlet,便于代码重用
private int startindex;//每页开始的记录序号
private int pagesize=10;//一个页面的记录数量
private int pagenum;//用户指定的页码
private int pagerecord;//数据库中需要分页的总记录数
/**
指定页码显示的大小
**/
private int startPage;//开始页码
private int endPage;//结束页码
public Page(int pagenum,int pagerecord){
this.pagenum=pagenum;
this.pagerecord=pagerecord;
startindex=(pagenum-1)*pagesize;
totalpage=(int)Math.ceil(pagerecord*1.0/pagesize);
//jsp页面设置只显示十个页码,若总页码数小于十,则开始页面为1,结束页码为总页数页码
if(totalpage<=10){
startPage=1;
endPage=totalpage;
}else{
startPage=pagenum-4;
endPage=pagenum+5;
if(endPage>=totalpage){
startPage=totalpage-9;
endPage=totalpage;
}
if(startPage<1){
startPage=1;
endPage=10;
}
}
}//相关的set/get方法此处省略
}
3.Jsp页面显示分页
Page对象通过request域带到Jsp页面,通过el表达式,函数和自定义标签显示page对象内的数据。
代码实现:
当前页码:[${page.pagenum }]
<c:if test="${page.pagenum >1}">
<a href="${page.url}?pagenum=${page.pagenum-1}">上一页</a>
</c:if>
<c:forEach var="pagenum" begin="${page.startPage }" end="${page.endPage }" >
[<a href="${page.url}?pagenum=${pagenum}">${pagenum}</a>]
</c:forEach>
<c:if test="${page.pagenum <page.totalpage}">
<a href="${page.url}?pagenum=${page.pagenum+1}">下一页</a>
</c:if>
共[${page.pagerecord }]条记录 共[${page.totalpage }]页
跳转到<input type="text" id="choosePage" style="width:30px;"/>页 <input type="button" value="GO" onclick="goPage()">
<script type="text/javascript">
function goPage(){
var page=document.getElementById("choosePage").value;
if(page!=null &&(page>0 && page<=${page.totalpage})){
window.location.href="${page.url}?pagenum="+page;
}else{
alert("请输入正确页码");
document.getElementById("choosePage").value=null;
}
}
</script>