这是我们所要的效果
但是怎么用代码实现呢,那摩让我们先来分析一下吧!
第一步分析我们做分页需要什么数据:
我们从两个方向来分析:1 页面方向,2 servlet方向
一 ,页面方向
1 当前页 currPageCode
2 总 页数 totalPage
3一页中的记录数据 datas
二,servlet方向
1 当前页 currPageCode
2 总页数 totalPage
3 每页记录数 pagesize
4 一共多少条记录 totalRecord
5 一页中的记录数据 datas
6当前页第一条记录的行数 currPageBeginIndex
7 url
哦了
那摩我们来写一个JavaBean吧
public class PageBean {
private int cp;//当前页
private int pc;//可以通过每页记录数和共多少条记录得到 (dt%md ==0 )?dt/md : dt/md+1 一共多少页
private int md;//每页记录数
private List pd;//页中的记录数据
private int dt;//一共多少条记录
private int cd;//可以通过每页记录是*(当前页数-1) + 1得到,当前页第一条记录的行数
private String url;
//为了清楚起见,我就没有粘上我的setget方法
}
嗯,有了javabean了,那摩就先让我们写一下servlet吧!
public String findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 1 通过页面回传的当前页信息设置当前页
* 2 设置每页所显示的数据
* 3 调用servlce的findAll方法获得一共多少条记录及当前页的数据
*
*/
PageBean pb = new PageBean();
if(request.getParameter("cp") != null && !request.getParameter("cp").trim().isEmpty()) {
int cp = Integer.parseInt(request.getParameter("cp"));
pb.setCp(cp);
}
else {
pb.setCp(1);
}
pb.setMd(10);
pb.setPd(service.findAll(pb.getCd(),pb.getMd()));
pb.setDt(service.count());
String url = getUrl(request);
pb.setUrl(url);
request.setAttribute("pb",pb);
return "f:list.jsp";
}
客户列表
客户姓名
性别
生日
手机
邮箱
描述
操作
${customer.cname }
${customer.gender }
${customer.birthday}
${customer.cellphone }
${customer.email }
${customer.description }
编辑
删除
第${requestScope.pb.cp }页/共 ${pb.pc }页
">首页
上一页
<%--
用来进行中间页码的显示及使用超链接所带来的的问题的解决方案
如何显示页码呢,我们其实只需要两个数据,begin和end就哦了,
我们常见的百度页面有什么特点呢,你可以去看看我就不多说了;下面我给出他的计算公式:
如果总页数<=10(列表长度),那么begin=1,end=总页数
否则
使用公式计算;begin=pc-5, end=pc + 4;
两种特殊情况:
头溢出:当begin<1时,让begin=1
尾溢出:当end>${tp}时,让end=${tp}
--%>
${i }
[${i }]
下一页
尾页
哦了多余的话我就不解释了,我想你看过这段代码之后会明白的吧。
那摩接下来让我们来写一个service和dao就算完事了,service我就不说了我们直接来看dao吧
public List findAll(int index,int length) {
String sql = "select * from t_customer limit ?,?";
List l = null;
Object[] p = {index,length};
try {
l = queryRunner.query(sql, new BeanListHandler(Customer.class),p);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return l;
}
public int count() {
String sql = "select count(*) from t_customer";
Number n = null;
try {
n = (Number)queryRunner.query(sql, new ScalarHandler());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return n.intValue();
}
哦了
有人会问我getUrl()方法是什么鬼,还有encoding()方法又是你妈什么?
应为我们是使用get提交的所以会造成乱码,嗯对,我们获取的customer对象他爹都不认识他,我们的encoding方法就是用来进行解码的
//这是其中的一个,其他的属性也如同
if(c.getCname() != null && !c.getCname().trim().isEmpty()) {
byte[] b = null;
try {
b = c.getCname().getBytes("iso-8859-1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String name=null;
try {
name = new String(b,"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
c.setCname(name);
}
private String getUrl(HttpServletRequest request) {
//String c = request.getContextPath();
String q = request.getQueryString();
String s = request.getServletPath();
if(q != null && !q.trim().isEmpty()) {
if( q.contains("&cp=")) {
int i = q.indexOf("&cp=");
q = q.substring(0, i);
}
}
String url = s + "?" + q;
return url;
}
//多条件查询的servlet方法
public String query(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Customer customer = new Customer();
try {
BeanUtils.populate(customer,request.getParameterMap());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Customer c = encoding(customer);
PageBean pb = new PageBean();
if(request.getParameter("cp") != null && !request.getParameter("cp").trim().isEmpty()) {
int cp = Integer.parseInt(request.getParameter("cp"));
pb.setCp(cp);
}
else {
pb.setCp(1);
}
pb.setMd(10);
pb.setPd(service.query(customer,pb.getCd(),pb.getMd()));
pb.setDt(service.count());
String url = getUrl(request);
pb.setUrl(url);
request.setAttribute("pb",pb);
return "f:list.jsp";
}
public List query(Customer customer ,int index,int length) {
//我们将其参数放入ArrayList中
List