OA-分页查询(抽象最终版)一

       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方法我删除了,看到上面这个类中的方法和业务逻辑其实并不难,但是如果重复性的工作多了,这些东西也是够折磨你的。

由于篇幅过长 小编在下篇文章中 继续为您抽象!



原文地址:https://www.cnblogs.com/xzpblog/p/5117911.html