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

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



  • 相关阅读:
    centos 安装 TortoiseSVN svn 客户端
    linux 定时任务 日志记录
    centos6.5 安装PHP7.0支持nginx
    linux root 用户 定时任务添加
    composer 一些使用说明
    laravel cookie写入
    laravel composer 安装指定版本以及基本的配置
    mysql 删除重复记录语句
    linux php redis 扩展安装
    linux php 安装 memcache 扩展
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117911.html
Copyright © 2011-2022 走看看