WEB分页

分页

一、什么是分页?(WHAT)
分页是在前台中把从数据库中查询出来的大量数据分成多页来显示的一种方式。(数据展现的一种方式)
二、为什么需要分页?(WHY)
对于用户的一次查询,通常都汲及到数据库中的许多数据,这个数据通常可能是成千上万,如果用户一次性把成千上万的数据查询出来展现在页面而没有使用分页的话会有
以下两个问题:其一,从系统的角度来说是一个效率问题,一次性查询出成千上万条数据对于数据库和服务器来说是一个很重的负担。其二,从用户的角度来说,一次性把那么
多的数据展现在用户面前,用户虽然查询出来但不一定会全部看完这些数据,可能也就是会看数据某一部分。基于以上两个问题的原因,我们应该使用分页,用户进行查询时,
我们仅查询一部分的数据(即在前台中的一页数据),当用户需要查询更多数据时才再次向服务器发出请求查询下一页的数据,查其所需这样就解决了以上两个问题,这是是我们
为什么要使用分页的原因。
三、分页在哪里使用?(WHERE)
分页对于系统的中所有查询都可以使用,对于一个查询中汲及到大量数据时最好使用分页。
四、如何使用分页?(HOW)
对于分页的使用分为前台和后台两部分。

客户端:
(1)在客户端前台需要显示的分页信息有哪些?
总记录数、当前页、总页数、每页显示记录数
(2)进行分页的操作有哪些?
首页、上一页、下一页、尾页、具体页
(3)在分页时进行后台交互时要传递的信息有哪些?
数据查询起始索引:offset 或 页码:page

服务器端:
(1)进行分页查询时需要哪些信息?
要进行数据库获取的起始索引(即要从哪里开始获取数据):offset
每页显示的记录数(即要获取多少条记录):pagesize
(2)如何进行数据查询?
在后台中得到offset、pagesize两个参数后拼装成相应的SQL后向数据库中发出得到相应的数据,SQL如何写,要依赖于具体的数据库。
(3)查询后向服务器端前台反馈一些什么信息。
其一:查询出来的数据集合。
其二:数据的总记录数。

使用pager-taglib实现分页:
(1)pager-taglib是什么?
pager-taglib是apache的一个开源分页组件,可以到apache的网站下载。
(2)如何使用?
1、加入pager-taglib.jar包。
2、引入相应的标签。
<%@ taglib prefix="pag" uri="http://jsptags.com/tags/navigation/pager" %>
3、使用相应标签进行分页处理。

pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10

pg:first【第一页的标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 首页第一行的索引值
lastItem - 首页最后一行的索引值

pg:pre【上一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 前页第一行的索引值
lastItem - 前页最后一行的索引值

pg:next【下一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 下页第一行的索引值
lastItem - 下页最后一行的索引值

pg:last重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 尾页第一行的索引值
lastItem - 尾页最后一行的索引值

pg:pages【这个标签用来循环输出页码信息】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - pageNumber这个页码指定的那一页的第一行的索引值
lastItem - pageNumber这个页码指定的那一页的最后一行的索引值

使用示例(DEMO):

前台JSP:
<table border="1" width="100%" borderColor=#666666 cellSpacing=0 cellPadding=0 width="95%" border=1>
<tr>
<td align="center"><b>ID</b></td>
<td align="center"><b>商品名称</b></td>
<td align="center"><b>商品描述</b></td>
<td align="center"><b>商品价格</b></td>
<td align="center"><b>商品数量</b></td>
</tr>
<c:forEach items="${pagerModel.datas}" var="product">
<tr>
<td align="center">${product.id }</td>
<td>${product.name }</td>
<td>${product.remark }</td>
<td>${product.price }</td>
<td>${product.count }</td>
</tr>
</c:forEach>
</table>
<!—分页组件标签-->
<pag:pager items="${pagerModel.total}" export="currentPageNumber=pageNumber" url="pager.do">
<pag:first>
<a href="${pageUrl }">首页</a>
</pag:first>
<pag:prev>
<a href="${pageUrl }">前页</a>
</pag:prev>
<pag:pages>
<c:choose>
<c:when test="${currentPageNumber eq pageNumber}">
<font color="red">${pageNumber }</font>
</c:when>
<c:otherwise>
<a href="${pageUrl }">${pageNumber }</a>
</c:otherwise>
</c:choose>
</pag:pages>
<pag:next>
<a href="${pageUrl }">后页</a>
</pag:next>
<pag:last>
<a href="${pageUrl }">尾页</a>
</pag:last>
</pag:pager>


对应的Action:
public class PagerAction extends Action {

//商品管理DAO
private ProductDao productDao = new ProductDao() ;

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获得查询起始索引
String offset = request.getParameter("pager.offset") ;
if(offset==null || "".equals(offset)){
offset = "0" ;
}
PagerModel pagerModel = new PagerModel() ;
//得到数据总记录数
int count = productDao.getRecordCount() ;
pagerModel.setTotal(count) ;
//分页查询商品
List products = productDao.queryAll(Integer.parseInt(offset), 10) ;
pagerModel.setDatas(products) ;

request.setAttribute("pagerModel", pagerModel) ;

return mapping.findForward("pager_tag") ;
}


}

/**
* 分页数据模型类
* @author lsgsunny
*
* Date 2009-7-16
*/
public class PagerModel {
private List datas;
private int total;

public List getDatas() {
return datas;
}
public void setDatas(List datas) {
this.datas = datas;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
}


主要原理:
根据所给的总记录数和每页显示记录数,帮我们算出每一页查询的起始索引值,并且附加到地址栏后,当我们点击分页的操作时,可以从服务器端得到查询起始索引值,
服务器端可以根据这个查询起始索引和每页显示记录数(这个数自己在后台进行定义,但一定要和前台标签定义的一致)。

具体描述:
用户点击查询进入到Action中把数据从数据库中把第一页数据查询出来,并且查出总记录数,JSP显示组件生成页面时,利用分页组件的标签,根据总记录数和预先定
义好的每页显示记录数,进行每一页的查询起始索引计算,并且把计算好的索引附加到URL上,比如我们点击下一页操作时,会把下一页查询起始索引值传到服务器端,接收
到参数后,进行数据查询,数据查询出来后,转到JSP,分页组件的标签会重新计算下一页这个操作对应的起始索引值,并且附加到URL,前台可以看到索引值跟上次不再一样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值