===================前端=========================
<center>
第${pageBean.pageCode }页/共${pageBean.totalPage }页<a href="${pageBean.url }&pageCode=1">首页</a>
<c:if test="${pageBean.pageCode>1 }">
<a href="${pageBean.url }&pageCode=${pageBean.pageCode-1 }">上一页</a>
</c:if>
<%--计算begin 和 end --%>
<c:choose>
<%-- 当总页数不足10页时 --%>
<c:when test="${pageBean.totalPage<=10 }">
<c:set var="begin" value="1"/>
<c:set var="end" value="${pageBean.totalPage}" />
</c:when>
<%--当总页数大于10页时,通过计算得到begin 和end --%>
<c:otherwise>
<c:set var="begin" value="${pageBean.pageCode-5 }"/>
<c:set var="end" value="${pageBean.pageCode+4 }"/>
<%--头溢出 --%>
<c:if test="${begin<1 }">
<c:set var="begin" value="1"/>
<c:set var="end" value="10"/>
</c:if>
<%--尾溢出 --%>
<c:if test="${end>pageBean.totalPage }">
<c:set var="begin" value="${pageBean.totalPage-9 }"/>
<c:set var="end" value="${pageBean.totalPage }"/>
</c:if>
</c:otherwise>
</c:choose>
<%--循环遍历页码列表 --%>
<c:forEach var="i" begin="${begin}" end="${end}">
<c:choose>
<c:when test="${i eq pageBean.pageCode }">
[${i}]
</c:when>
<c:otherwise>
<a href="${pageBean.url }&pageCode=${i }
">
[${i}]
</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${pageBean.pageCode<pageBean.totalPage }">
<a href="${pageBean.url }&pageCode=${pageBean.pageCode+1 }">下一页</a>
</c:if>
<a href="${pageBean.url }&pageCode=${pageBean.totalPage }">尾页</a>
</center>
=============== bean=======================
public class PageBean<T> {
private int pageCode;
private int totalRecod;
private int pageSize;
private List<T> beanList;
=================dao=========================
public PageBean<Customer> query(Customer criteria,int pc,int ps){
try{
/**
* 创建pageBean对象
* 设置已有对象pc ps
* 得到tr
* 得到beanList
*
*/
PageBean<Customer> pb=new PageBean<Customer>();
pb.setPageCode(pc);
pb.setPageSize(ps);
List<Object> params=new ArrayList<Object>();
//给出sql语句前半句,以后再追加,考虑到代码重用的问题,我们需要把sql语句拆开
StringBuilder preSql=new StringBuilder("select count(*) from customers");
StringBuilder whereSql=new StringBuilder(" where 1=1");
//切记,and 前面必须要加空格 否则会报 必须声明变量 @p0and的异常
if(criteria.getName()!=null && !criteria.getName().trim().isEmpty()){
whereSql.append(" and name like ?");
params.add("%"+criteria.getName()+"%");
}
if(criteria.getGender()!=null && !criteria.getGender().trim().isEmpty()){
whereSql.append(" and gender like ?");
params.add("%"+criteria.getGender()+"%");
}
if(criteria.getCellphone()!=null && !criteria.getCellphone().trim().isEmpty()){
whereSql.append(" and cellphone like ?");
params.add("%"+criteria.getCellphone()+"%");
}
if(criteria.getEmail()!=null && !criteria.getEmail().trim().isEmpty()){
whereSql.append(" and email like ?");
params.add("%"+criteria.getEmail()+"%");
}
Number num=(Number) qr.query(preSql.append(whereSql).toString(),new ScalarHandler(), params.toArray());
int tr=num.intValue();
pb.setTotalRecod(tr);
int tp=tr%10==0?tr/10:tr/10+1;
pb.setTotalPage(tp);
//我们还要考虑到分页的问题,所以要把分页条件给出来
// select top (?) * from customers where id not in( select top (?) id from customers)
StringBuilder sql=new StringBuilder("select top (?) * from customers");
StringBuilder pagesql=new StringBuilder(" and id not in( select top (?) id from customers)");
params.add(0,ps);
params.add((pc-1)*ps);
List<Customer> beanList= qr.query(sql.append(whereSql).append(pagesql).toString(),new BeanListHandler<Customer>(Customer.class), params.toArray());
pb.setBeanList(beanList);
return pb;
}catch(SQLException e){
throw new RuntimeException(e);
}
}
==================servlet=======================
public String query(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException{
/** 把条件封装到Customer中
*
* 得到pc 指定ps ,传参数得到pageBean
* 把pageBean保存到request中
* 转发到list中
*/
/**
* 处理get请求的编码问题
*/
Customer criteria=CommonUtils.toBean(request.getParameterMap(), Customer.class);
criteria=encoding(criteria);
int pc=this.getPageCode(request);
int ps=10;
PageBean<Customer> pb=customerService.query(criteria,pc,ps);
pb.setUrl(this.getUrl(request));
request.setAttribute("pageBean", pb);
return "f:/list.jsp";
}