javaweb 分页基本构造(分页封装)

来源:互联网 发布:销售数据分析ppt 编辑:程序博客网 时间:2024/05/21 20:27

前端需要传递的参数:pageNumber(页码,必填默认为1),pageSize(每页显示的记录数)

后台的封装Page类为以下代码:

public class Pager<T> {private List<T> list; // 对象记录结果集private int total = 0; // 总记录数private int limit = 10; // 每页显示记录数private int start = 0;// 起始点private int pages = 1; // 总页数private int pageNumber = 1; // 当前页private boolean isFirstPage = false; // 是否为第一页private boolean isLastPage = false; // 是否为最后一页private boolean hasPreviousPage = false; // 是否有前一页private boolean hasNextPage = false; // 是否有下一页private int navigatePages = 8; // 导航页码数private int[] navigatePageNumbers; // 所有导航页号public Pager() {}public Pager(int total, int pageNumber) {init(total, pageNumber, limit);}public Pager(int total, int pageNumber, int limit) {init(total, pageNumber, limit);}private void init(int total, int pageNumber, int limit) {// 设置基本参数this.total = total;this.limit = limit;this.pages = (this.total - 1) / this.limit + 1;// 根据输入可能错误的当前号码进行自动纠正if (pageNumber < 1) {this.pageNumber = 1;} else if (pageNumber > this.pages) {this.pageNumber = this.pages;} else {this.pageNumber = pageNumber;}this.start = (this.pageNumber - 1) * this.limit;// 基本参数设定之后进行导航页面的计算calcNavigatePageNumbers();// 以及页面边界的判定judgePageBoudary();}/** * 计算导航页 */private void calcNavigatePageNumbers() {// 当总页数小于或等于导航页码数时if (pages <= navigatePages) {navigatePageNumbers = new int[pages];for (int i = 0; i < pages; i++) {navigatePageNumbers[i] = i + 1;}} else { // 当总页数大于导航页码数时navigatePageNumbers = new int[navigatePages];int startNum = pageNumber - navigatePages / 2;int endNum = pageNumber + navigatePages / 2;if (startNum < 1) {startNum = 1;// (最前navPageCount页for (int i = 0; i < navigatePages; i++) {navigatePageNumbers[i] = startNum++;}} else if (endNum > pages) {endNum = pages;// 最后navPageCount页for (int i = navigatePages - 1; i >= 0; i--) {navigatePageNumbers[i] = endNum--;}} else {// 所有中间页for (int i = 0; i < navigatePages; i++) {navigatePageNumbers[i] = startNum++;}}}}/** * 判定页面边界 */private void judgePageBoudary() {isFirstPage = pageNumber == 1;isLastPage = pageNumber == pages && pageNumber != 1;hasPreviousPage = pageNumber != 1;hasNextPage = pageNumber != pages;}<span style="white-space:pre"></span>//省去get()set()方法}


后台先统计要被展示的总记录条数,total,例如:

// 总记录数(根据不同框架代码样式有所不同,总之就是要获取需要查询的记录总数)int total = XXXDAO.getXXXTotal(params);

获取总记录数后即可通过以下代码生成page类
//total(记录总数),page(查询页码,前端传递获得),pageSize(每页显示记录数,前端获取亦可,后端定义亦可),XXX表示展示需要封装的类(例如:需要展示User信息,XXX即U//SER类)Pager<XXX> pager = new Pager<XXX>(total,page,pageSize);

在sql语句中加入查询的开始条数以及结束条数字段,这两个字段可以从以下代码获取

 pager.getStart();//开始记录数 pager.getLimit();//结束记录数


通过sql获取记录集,记住一定要限制条数语句
select * from xxx limit #{start},#{limit}

将结果集放入page中

pager.setList(list);return pager;


前端JSP代码:(忽略样式)

<span style="white-space:pre"></span><div class="am-cf"><span style="white-space:pre"></span>共 ${pager.total} 条记录,当前${pager.pageNumber}页<span style="white-space:pre"></span><div class="am-fr"><ul class="am-pagination"><c:if test="${pager.hasPreviousPage}"><li><a onclick="pageDataCountForCUser('${pager.pageNumber-1}')">«</a></li></c:if><c:if test="${!pager.hasPreviousPage} "><li><a href="javascript:">«</a></li></c:if><c:forEach items="${pager.navigatePageNumbers}" var="num"><li><a onclick="pageDataCountForCUser('${num}') " ${pager.pageNumber == num ? "style='background-color: #4086CB;co<span style="white-space:pre"></span>lor: white;font-weight: bold'" : "" }>${num}</a></li></c:forEach><c:if test="${pager.hasNextPage}"><li><a onclick="pageDataCountForCUser('${pager.pageNumber+1}')">»</a></li></c:if><c:if test="${!pager.hasNextPage}"><li><a href="javascript:void(0)">»</a></li></c:if></ul></div></div>





0 0
原创粉丝点击