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

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



  • 相关阅读:
    新年献礼 技术胖262集前端免费视频 让您走的更容易些
    Eruda 一个被人遗忘的调试神器
    你(可能)不知道的web api
    含有阶乘的幂级数和
    sin x 特解的假设
    将y=arctanx展开为x的幂级数
    判断数项级数是否收敛
    ubuntu中用安装字体的方法解决文档中的音标乱码
    英语单词
    用递归实现汉诺塔
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117911.html
Copyright © 2011-2022 走看看