OA视频和SSH网上商城最大的区别是什么,不是项目的不同,是面向的对象的体现不同,最近在做一个关于OA分页的抽象功能,我下面只来进行最终版的编写。
分页,这项功能在每个页面可能都会体现到,如果每个页面都有,那好我们就把分页这部分抽象,看下面代码
页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <div id=PageSelectorBar> <div id=PageSelectorMemo> 页次:${currentPage}/${pageCount }页 每页显示:${pageSize }条 总记录数:${recordCount }条 </div> <div id=PageSelectorSelectorArea> <a href="javascript: gotoPage(1)" title="首页" style="cursor: hand;"> <img src="${pageContext.request.contextPath}/style/blue/images/pageSelector/firstPage.png"/> </a> <s:iterator begin="%{beginPageIndex}" end="%{endPageIndex}" var="num"> <s:if test="#num == currentPage"> <%-- 当前页 --%> <span class="PageSelectorNum PageSelectorSelected">${num}</span> </s:if> <s:else> <%-- 非当前页 --%> <span class="PageSelectorNum" style="cursor: hand;" onClick="gotoPage(${num});">${num}</span> </s:else> </s:iterator> <a href="javascript: gotoPage(${pageCount})" title="尾页" style="cursor: hand;"> <img src="${pageContext.request.contextPath}/style/blue/images/pageSelector/lastPage.png"/> </a> 转到: <select onchange="gotoPage(this.value)" id="_pn"> <s:iterator begin="1" end="%{pageCount}" var="num"> <option value="${num}">${num}</option> </s:iterator> </select> <script type="text/javascript"> $("#_pn").val("${currentPage}"); </script> </div> </div> <script type="text/javascript"> function gotoPage( pageNum ){ // window.location.href = "forum_show.action?id=${id}&pageNum=" + pageNum; $(document.forms[0]).append("<input type='hidden' name='pageNum' value='" + pageNum +"'>"); document.forms[0].submit(); } </script>
这样我们在有分页的页面中只需写这样的一段代码就搞定了。
<!--分页信息--> <%@ include file="/WEB-INF/jsp/public/pageView.jspf" %>
我们来思考这么一个问题,当看SSH网上商城的时候,是不是每一个页面都会进行到计算,因为计算你数据库中数据有多少,每页显示多少条,从第几页开始显示等等,网上商城每条线都要计算一次,出现大量重复性的代码,那好,我们继续抽象,看下面代码:
PageBean代码:
package cn.itcast.oa.domain; import java.util.List; /** * 分页功能中的一页的信息 * * @author 志鹏 * */ public class PageBean { // 指定的或是页面参数 private int currentPage; // 当前页 private int pageSize; // 每页显示多少条 // 查询数据库 private int recordCount; // 总记录数 private List recordList; // 本页的数据列表 // 计算 private int pageCount; // 总页数 private int beginPageIndex; // 页码列表的开始索引(包含) private int endPageIndex; // 页码列表的结束索引(包含) /** * 只接受前4个必要的属性,会自动的计算出其他3个属生的值 * * @param currentPage * @param pageSize * @param recordCount * @param recordList */ public PageBean(int currentPage, int pageSize, int recordCount, List recordList) { this.currentPage = currentPage; this.pageSize = pageSize; this.recordCount = recordCount; this.recordList = recordList; // 计算总页码 pageCount = (recordCount + pageSize - 1) / pageSize; // 计算 beginPageIndex 和 endPageIndex // >> 总页数不多于10页,则全部显示 if (pageCount <= 10) { beginPageIndex = 1; endPageIndex = pageCount; } // >> 总页数多于10页,则显示当前页附近的共10个页码 else { // 当前页附近的共10个页码(前4个 + 当前页 + 后5个) beginPageIndex = currentPage - 4; endPageIndex = currentPage + 5; // 当前面的页码不足4个时,则显示前10个页码 if (beginPageIndex < 1) { beginPageIndex = 1; endPageIndex = 10; } // 当后面的页码不足5个时,则显示后10个页码 if (endPageIndex > pageCount) { endPageIndex = pageCount; beginPageIndex = pageCount - 10 + 1; } } } }上面代码中的一些get set方法我删除了,看到上面这个类中的方法和业务逻辑其实并不难,但是如果重复性的工作多了,这些东西也是够折磨你的。
由于篇幅过长 小编在下篇文章中 继续为您抽象!