1.改写dao,对service 层提供分页的数据服务:getPageData() getTotalRecord
//获取分页数据
public List<Customer> getPageData(int startindex,int pagesize){
try{
String sql = "select * from customer limit ?,?";
Object params[] = {startindex,pagesize};
return (List<Customer>) JdbcUtils.query(sql, params, new BeanListHandler(Customer.class));
}catch (Exception e) {
throw new DaoException(e);
}
}
//得到总记录数
public int getTotalrecord(){
try{
String sql = "select count(*) from customer";
Object params[] = {};
long l = (Long) JdbcUtils.query(sql,params,new IntegerHandler());
return (int)l;
}catch (Exception e) {
throw new DaoException(e);
}
}
2、设计page对象,封装分页的页面数据
list
totalpage
在domain下创建page实体
package cn.itcast.domain;
import java.util.List;
//封装页面数据
public class Page {
private List list;
private int totalpage; //记住总页数
private int totalrecord;
private int pagesize = 10;
private int pagenum; //代表用户想看的页
private int startindex; //代表用户想看的页的数据从数据库哪个地方开始取
private int startPage; //记住jsp页面显示的起始页码
private int endPage; //记往jsp页面显示的结束页码
private String url; //记住用于处理分页的servlet
public Page(int totalrecord,int pagenum){
this.totalrecord = totalrecord;
if(this.totalrecord%this.pagesize==0){
this.totalpage = this.totalrecord/this.pagesize;
}else{
this.totalpage = this.totalrecord/this.pagesize + 1;
}
this.pagenum = pagenum; //1
this.startindex = (this.pagenum-1)*this.pagesize;
//根据用户想看的页pagenum,算出jsp页面的起始和结束页码
if(this.totalpage<=10){
this.startPage = 1;
this.endPage = this.totalpage;
}else{
//20 18
this.startPage = this.pagenum -4;
this.endPage = this.pagenum + 5;
if(this.startPage<1){
this.startPage = 1;
this.endPage = 10;
}
if(this.endPage > this.totalpage){
this.endPage = this.totalpage;
this.startPage = this.totalpage-9;
}
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getTotalpage() {
return totalpage;
}
public void setTotalpage(int totalpage) {
this.totalpage = totalpage;
}
public int getTotalrecord() {
return totalrecord;
}
public void setTotalrecord(int totalrecord) {
this.totalrecord = totalrecord;
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getPagenum() {
return pagenum;
}
public void setPagenum(int pagenum) {
this.pagenum = pagenum;
}
public int getStartindex() {
return startindex;
}
public void setStartindex(int startindex) {
this.startindex = startindex;
}
}
3、改写service ,它对 web层提供分页的数据服务 Page getpageData(String pagenum)
public Page getPageData(String pagenum,String url){
int totalrecord = dao.getTotalrecord();
if(pagenum==null){
//代表用户想看第一页的数据
Page page = new Page(totalrecord,1); //算出了总页数,以及用户想看的页从数据库哪个地方开始取
List list = dao.getPageData(page.getStartindex(), page.getPagesize());
page.setList(list);
page.setUrl(url);
return page;
}else{
//代表用户想看指定的页
Page page = new Page(totalrecord,Integer.parseInt(pagenum));
List list = dao.getPageData(page.getStartindex(), page.getPagesize());
page.setList(list);
page.setUrl(url);
return page;
}
}
分页jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
当前第[${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.totalpage }]页,共[${page.totalrecord}]纪录,
<input type="text" style="width: 30px" id="pagenum">
<input type="button" value=" GO " οnclick="goWhich(document.getElementById('pagenum'))">
<script type="text/javascript">
function goWhich(input){
var pagenum = input.value;
if(pagenum==null || pagenum==""){
alert("请输入页码!");
return;
}
if(!pagenum.match("\\d+")){
alert("请输入数字!");
input.value="";
return;
}
if(pagenum<1 || pagenum>${page.totalpage}){
alert("无效的页码!");
input.value="";
return;
}
window.location.href="${page.url }?pagenum=" + pagenum;
}
</script>