自定義的分頁組件

  • 使用方法,在要進(jìn)行分頁的頁面,使用jsp:include 標(biāo)簽動(dòng)態(tài)包含本組件
    該組件需要的參數(shù)有

    1. url 需要進(jìn)行分頁的網(wǎng)頁路徑
    2. currentPage 定義當(dāng)前所在頁數(shù),如果沒有定義,則默認(rèn)是第一頁
    3. linesize 定義每頁顯示的數(shù)據(jù)個(gè)數(shù),如果沒有定義,則默認(rèn)是5行
    4. allRecorders 保存總記錄的統(tǒng)計(jì)結(jié)果,需要從包含頁面?zhèn)魅?/li>
    5. column 模糊查詢的數(shù)據(jù)列
    6. keyWord 模糊查詢的關(guān)鍵字
  • 組件內(nèi)容

<%@ page pageEncoding="UTF-8"%>

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/style.css">
<%
    request.setCharacterEncoding("UTF-8") ;
    String url = request.getParameter("url") ;  // 提交路徑
    int currentPage = 1 ;   // 當(dāng)前所在的頁面,默認(rèn)是在第1頁
    int lineSize = 1 ;  // 表示每頁顯示的數(shù)據(jù)行數(shù)
    int allRecorders = 0 ;  // 保存總記錄的統(tǒng)計(jì)結(jié)果
    int pageSize = 1 ;  // 總頁數(shù)
    String column = request.getParameter("column") ;
    String keyWord = request.getParameter("keyWord") ;
%>
<%
    try {
        currentPage = Integer.parseInt(request.getParameter("currentPage")) ;
    } catch (Exception e) {}
    try {
        lineSize = Integer.parseInt(request.getParameter("lineSize")) ;
    } catch (Exception e) {}
    try {
        allRecorders = Integer.parseInt(request.getParameter("allRecorders")) ;
    } catch (Exception e) {}
    if ("null".equals(column) || column == null || "".equals(column)) {
        column = "" ;
    }
    if ("null".equals(keyWord) || keyWord == null || "".equals(keyWord)) {
        keyWord = "" ;
    }
%>
<%
    int seed = 2 ;  // 定義一個(gè)種子數(shù),用于判斷是否會(huì)有“.”
    if (allRecorders > 0) {
        pageSize = (allRecorders + lineSize - 1) / lineSize ;
    }
%>
<div id="pageCtl">
    <ul class="pagination"> 
        <li class="<%=currentPage == 1? "active" : ""%>">
        <%
            if (currentPage == 1) {
        %>
                <span>1</span>
        <%
            } else {
        %>
            <a href="<%=url%>?cp=<%=1%>&ls=<%=lineSize%>&col=<%=column%>&kw=<%=keyWord%>">1</a></li>
        <%
            }
        %>
<%
    if (pageSize > seed * 2) {  // 數(shù)據(jù)量很大,需要進(jìn)行省略號(hào)的出現(xiàn)
        if (currentPage <= seed * 2) {
            int startPage = 2 ; // 從第2頁開始顯示
            int endPage = currentPage + seed * 2  ; 
            if (endPage >= pageSize)  {
                endPage = pageSize - 1 ;
            }
            for (int x = startPage ; x <= endPage ; x ++) {
%>
            <li class="<%=currentPage == x ? "active" : ""%>"><a href="<%=url%>?cp=<%=x%>&ls=<%=lineSize%>&col=<%=column%>&kw=<%=keyWord%>"><%=x%></a></li>
<%
            }
            if ((currentPage + seed * 2) < pageSize - 1) {
%> 
                <li class="disabled"><span>...</span></li>
<%
            }
        } else {    // 需要分兩段顯示了
%>
            <li class="disabled"><span>...</span></li>
<%
            int startPage = currentPage - seed ;    
            int endPage = currentPage + seed ;
            if (endPage >= pageSize) {
                endPage = pageSize - 1 ;
            }
            for (int x = startPage ; x <= endPage ; x ++) {
%>
            <li class="<%=currentPage == x ? "active" : ""%>"><a href="<%=url%>?cp=<%=x%>&ls=<%=lineSize%>&col=<%=column%>&kw=<%=keyWord%>"><%=x%></a></li>
<%
            }
            if ((currentPage + seed * 2) < pageSize) {  // 后面還有很多頁
%>
            <li class="disabled"><span>...</span></li>
<%
            } else {    // 后續(xù)的頁碼需要出現(xiàn)
                for (int x = currentPage + seed + 1 ; x < pageSize ; x ++ ) {
%>
            <li class="<%=currentPage == x ? "active" : ""%>"><a href="<%=url%>?cp=<%=x%>&ls=<%=lineSize%>&col=<%=column%>&kw=<%=keyWord%>"><%=x%></a></li>
<%
                }
            }
        }
    }
%>
<%
    if (pageSize != 1) {
%>
        <li class="<%=currentPage == pageSize ? "active" : ""%>">
        <%
            if (currentPage == pageSize) {
        %>
                <span><%=pageSize%></li>
        <%
            } else {
        %>
                <a href="<%=url%>?cp=<%=pageSize%>&ls=<%=lineSize%>&col=<%=column%>&kw=<%=keyWord%>"><%=pageSize%></a>
        <%
            }
        %>
        </li>
<%
    }
%>
    </ul>
</div>
  • 使用示例
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="cn.mldn.service.*" %>
<%@ page import="cn.mldn.util.factory.*" %>
<%@ page import="cn.mldn.vo.*" %>
<%@ page import="java.util.*" %>
<html>
<head>
<%
    request.setCharacterEncoding("utf-8");
    String basePath = request.getScheme() + "://" + 
        request.getServerName() + ":" + request.getServerPort() + 
        request.getContextPath() + "/" ;
%>
<%!
    public static final String GOODS_LIST_URL="oages/back/admin/goods/goods_list.jsp";
    public static final String GOODS_ADD_URL = "pages/back/admin/goods/goods_add.jsp" ;
    public static final String GOODS_DELETE_URL = "pages/back/admin/goods/goods_delete_do.jsp" ;
    public static final String GOODS_EDIT_URL = "pages/back/admin/goods/goods_edit.jsp" ;
%>
<%
    //定義當(dāng)前所在頁數(shù),默認(rèn)為第一頁
    int currentPage = 1;
    //定義每頁顯示的數(shù)據(jù)個(gè)數(shù),默認(rèn)是每頁顯示5行數(shù)據(jù)
    int lineSize = 5;
    //定義總頁數(shù)默認(rèn)為1
    int pageSize = 1;
    //保存總記錄數(shù)
    int allRecorders = 0;
    //定義模糊查詢的數(shù)據(jù)列
    //在搜索分頁組件中,會(huì)自動(dòng)將字符串進(jìn)行拆分處理,字符串格式為"顯示的文字信息:模糊查詢數(shù)據(jù)列名稱"
    String columnData = "商品名稱:name";
    //column和keyWord的參數(shù)是在分頁搜索組件中獲取到的
    String column=request.getParameter("col");
    String keyWord=request.getParameter("ky");
    //從頁面中接收定義的當(dāng)前所在頁 和 每頁顯示個(gè)數(shù)的信息
    //其中cp表示當(dāng)前所在頁,ls表示每頁顯示的個(gè)數(shù)
    //由于數(shù)據(jù)類型的轉(zhuǎn)換異常無法處理,所以直接在瀏覽器中拋出異常
    try{
        currentPage = Integer.parseInt(request.getParameter("cp"));
    }catch(Exception e){}
    try{
        currentPage = Integer.parseInt(request.getParameter("ls"));
    }catch(Exception e){}
    
    //實(shí)例化IGoodsService接口,使用list()方法,取出分頁查詢的數(shù)據(jù)
    IGoodsService goodsService = Factory.getServiceInstance("goods.service");
    Map<String,Object> map = goodsService.list(currentPage, lineSize, column, keyWord);
    //取出所有商品信息
    List<Goods> allGoods = (List<Goods>)map.get("allGoods");
    //取出所有商品數(shù)量信息
    allRecorders = (Integer)map.get("goodsCount");
    //取出所有商品分類信息
    Map<Integer,String> allItems = (Map<Integer,String>)map.get("allItems");
%>
<base href="<%=basePath%>"/>
<title>商品列表</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script type="text/javascript" src="js/common/mldn_util.js"></script>
<script type="text/javascript" src="js/back/admin/goods/goods_list.js"></script>
<script type="text/javascript" src="jquery/jquery.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
    jsDeleteUrl = "<%=basePath + GOODS_DELETE_URL%>"
</script>
<link rel="stylesheet" type="text/css"
    href="bootstrap/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="h1"><strong><span class="glyphicon glyphicon-th-list"></span>&nbsp;商品信息列表</strong></div>
        </div>
        <div class="row">
        <!-- 在頁面中包含搜索分頁組件 -->
        <jsp:include page="/pages/plugins/split_plugin_search_bar.jsp">
            <jsp:param value="<%= GOODS_LIST_URL%>" name="url"/>
            <jsp:param value="<%= column%>" name="column"/>
            <jsp:param value="<%= keyWord%>" name="keyword"/>
            <jsp:param value="<%= allRecorders%>" name="allRecorders"/>
            <jsp:param value="<%= columnData%>" name="columnData"/>
        </jsp:include>
            <table class="table table-striped table-bordered table-hover">
                <tr>
                    <td style="width:5%"><input type="checkbox" id="selectall"/></td>
                    <td>商品名稱</td>
                    <td>商品單價(jià)</td>
                    <td>商品分類</td>
                    <td>操作</td>
                </tr>
                <%
                    //取出所有商品信息,進(jìn)行動(dòng)態(tài)生成頁面
                    Iterator<Goods> ite = allGoods.iterator();
                    while(ite.hasNext()){
                        Goods temp = ite.next();
                %>
                <tr>
                    <td><input type="checkbox" id="gid" value="<%=temp.getGid()%>"/></td>
                    <td><%=temp.getName() %></td>
                    <td><%=temp.getPrice() %></td>
                    <td><%= allItems.get(temp.getIid())%></td>
                    <td><a href="<%=GOODS_EDIT_URL%>?gid=<%=temp.getGid() %>" class="btn btn-warning btn-xs">
                        <span class="glyphicon glyphicon-pencil"></span>&nbsp;編輯</a></td>
                </tr>
                <%
                    }
                %>
            </table>
            <!-- 包含分頁組件 -->
            <jsp:include page="/pages/plugins/split_plugin_page_bar.jsp">
                <jsp:param value="<%= GOODS_LIST_URL%>" name="url"/>
                <jsp:param value="<%= currentPage%>" name="currentPage"/>
                <jsp:param value="<%= keyWord%>" name="keyWord"/>
                <jsp:param value="<%= column%>" name="column"/>
                <jsp:param value="<%= lineSize%>" name="lineSize"/>
                <jsp:param value="<%= allRecorders%>" name="allRecorders"/>
            </jsp:include>
            <button id="deleteBtn" class="btn btn-danger btn-lg">
                <span class="glyphicon glyphicon-trash"></span>&nbsp;刪除選中部信息
            </button>
        </div>
    </div>
</body>
</html>
  • 頁面效果
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,205評(píng)論 3 119
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,062評(píng)論 25 709
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,007評(píng)論 2 59
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 請(qǐng)介紹一下JVM內(nèi)存模型?用過哪些垃圾回收器?其在并發(fā)當(dāng)中的作用? Java中堆內(nèi)存和棧內(nèi)存區(qū)別? Java8的內(nèi)...
    深度思考中閱讀 336評(píng)論 0 0

友情鏈接更多精彩內(nèi)容