JSP分頁顯示實例(基於Bootstrap)

来源:http://www.cnblogs.com/Dreamer-1/archive/2016/06/11/5574785.html
-Advertisement-
Play Games

首先介紹一款簡單利落的分頁利器:bootstrap-paginator 效果截圖: GitHub官方下載地址:https://github.com/lyonlai/bootstrap-paginator 備用下載地址:http://files.cnblogs.com/files/Dreamer-1/ ...


首先介紹一款簡單利落的分頁顯示利器:bootstrap-paginator

效果截圖:

搜索記錄

GitHub官方下載地址:https://github.com/lyonlai/bootstrap-paginator

備用下載地址:http://files.cnblogs.com/files/Dreamer-1/bootstrap-paginator-master.rar

下麵就來詳細介紹一下基於這款分頁利器的JSP分頁顯示實現過程(註:相較於原網頁我隱去了很多不必要的內容,本例只專註於分頁顯示的實現)

 

一:

為什麼需要分頁顯示?

這篇博文的博主說得很透徹:http://blog.csdn.net/xiaoyousifang/article/details/5659667

 

二:

JSP頁面部分,這裡直接在JSP頁面中用JDBC連接SqlServer2005資料庫查詢數據(實際實現里不建議把複雜的業務邏輯封裝在JSP頁面中,JSP頁面應當只是負責顯示;對客戶端的響應、業務邏輯調用、結果轉發都應該由Servlet來完成)

代碼如下:

<%@ page import="PaginationExample.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%!
    private static final int pageSize = 20;    //設定每頁顯示的記錄條數(當前為每頁顯示20條記錄)
%>

<%    
    request.setCharacterEncoding("UTF-8");                    //設定客戶端提交給servlet的內容按UTF-8編碼
    response.setCharacterEncoding("UTF-8");                    //設定servlet傳回給客戶端的內容按UTF-8編碼
    response.setContentType("text/html;charset=UTF-8");        //告知瀏覽器用UTF-8格式解析內容
    
    String pageNoStr = request.getParameter("pageNoStr");    //接收客戶端傳遞的要顯示頁數
    int pageNo = 1;    //要顯示的頁數
    int totalPages = 1;    //總頁數
    
    //檢查、設置pageNo
    if (pageNoStr != null && !pageNoStr.equals("")) {
        try {
            pageNo = Integer.parseInt(pageNoStr);
            
            if (pageNo < 1) {
                //pageNo小於1時預設顯示第一頁
                pageNo = 1;
            }
        }
        catch (NumberFormatException e) {
            //獲取到的pageNo(當前頁面數)不合法時,預設顯示第一頁
            pageNo = 1;
        }
    }
    else {
        //其他未獲取到pageNo的情況都預設顯示第一頁
        pageNo = 1;
    }
    
/* ========================================連接資料庫(獲取總頁數與當前頁內要顯示的觀測記錄)====================================== */        
    
    /* 獲取資料庫中將記錄按指定條數(pageSize)分頁後的總頁數 */
    Connection totalConn = null;
    Statement totalStmt = null;
    ResultSet totalRs = null;
    
    try {
        totalConn = DBUtil.getConnection();
        
        //生成sql語句
        String sqlGetTotalPages = "select count(*) from alldata";

        //獲取總記錄條數
        totalStmt = totalConn.createStatement();
        totalRs = totalStmt.executeQuery(sqlGetTotalPages);
        totalRs.next();
        int countResult = totalRs.getInt(1);
        
        //取得總頁數
        totalPages = countResult % pageSize == 0 ? countResult / pageSize : (int)(countResult / pageSize) + 1;        
            
    } catch (SQLException e) {
        System.out.println("歷史記錄查詢出錯,操作未完成!");
        e.printStackTrace();
    } finally {
        DBUtil.close(totalRs);
        DBUtil.close(totalStmt);
        DBUtil.close(totalConn);
    }
    

    /* 如果頁數大於總頁數,則預設顯示最後一頁 */
    if (pageNo > totalPages) {
        pageNo = totalPages;
    }
    
    
    /* 獲取資料庫中當前頁內要顯示的觀測記錄,使用一個List來盛裝記錄 */
    List<Record> records = new ArrayList<Record>();    
    
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    
    int startIndex = (pageNo - 1) * pageSize + 1;
    int endIndex = pageNo * pageSize;
    
    try {
        conn = DBUtil.getConnection();
        
        String sql = "select * from (select row_number() over(order by data_taizhan_num, data_date asc) as 'num', * from alldata) as temp where num between " + startIndex + " and " + endIndex;
        pstmt = conn.prepareStatement(sql);
        rs = pstmt.executeQuery();
        while (rs.next()) {
            //取出每條記錄的數據,並將其封裝成Record對象
            Record r = new Record();
            r.setTaizhan_num(rs.getString(2));
            r.setDate(rs.getTimestamp(3));
            r.setTem(rs.getString(4));
            r.setHum(rs.getString(5));
            r.setPa(rs.getString(6));
            r.setRain(rs.getString(7));
            r.setWin_dir(rs.getString(8));
            r.setWin_sp(rs.getString(9));
                            
            records.add(r);        //將封裝好的Record對象放入列表容器中
        }
        
    } catch (SQLException e) {
        System.out.println("查詢出錯,操作未完成!");
        e.printStackTrace();
    } finally {
        DBUtil.close(rs);
        DBUtil.close(pstmt);
        DBUtil.close(conn);
    }
System.out.println(totalPages);
System.out.println(pageNo);
/* ========================================資料庫連接結束====================================== */
    
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">   <%-- 在IE運行最新的渲染模式 --%>
        <meta name="viewport" content="width=device-width, initial-scale=1">   <%-- 初始化移動瀏覽顯示 --%>
        <meta name="Author" content="Dreamer-1.">

        <link rel="stylesheet" href="css/bootstrap.css">
        <link rel="stylesheet" href="css/recordSearchResult.css">

        <script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>
        <script type="text/javascript" src="js/bootstrap.min.js"></script>
        <script type="text/javascript" src="js/bootstrap-paginator.min.js"></script>
            
        <title>- 搜索記錄 -</title>
    </head>
    
    <body>

        <div class="container">
            <div class="wrapper">    
            <!-- 使用表單展示數據記錄 -->    
            <form class="form-area">      
                <table class="table table-striped table-hover" >
                     <%
                        if (records == null || records.size() == 0) {
                            out.println("<tr><td><h4><strong>沒有符合要求的記錄呢,不如換個搜索條件試試吧~</strong></h4></td></tr>");                        
                        }
                        else {
                    %>                    
                            <tr>
                                <td><h4><strong>觀測台站</strong></h4></td>                                
                    <%
                                Record r = records.get(0);
                                    
                                if (r.getTem() != null) {
                                    out.println("<td><h4><strong>溫度(℃)</strong></h4></td>");
                                }
                                if (r.getHum() != null) {
                                    out.println("<td><h4><strong>濕度(%)</strong></h4></td>");
                                }
                                if (r.getPa() != null) {
                                    out.println("<td><h4><strong>壓強(hPa)</strong></h4></td>");
                                }
                                if (r.getRain() != null) {
                                    out.println("<td><h4><strong>雨量(mm)</strong></h4></td>");
                                }
                                if (r.getWin_dir() != null) {
                                    out.println("<td><h4><strong>風向(°)</strong></h4></td>");
                                }        
                                if (r.getWin_sp() != null) {
                                    out.println("<td><h4><strong>風速(m/s)</strong></h4></td>");
                                }
                                        
                    %>                        
                                <td><h4><strong>觀測時間</strong></h4></td>
                            </tr>
                    <%
                        }
                    %>
        
                    <%
                        if (records != null && records.size() != 0) {
                            for (Record r : records) {                        
                    %>
                    
                                <tr>
                                    <td><%= r.getTaizhan_num() %></td>
                    
                    <%
                                    if (r.getTem() != null) {
                                        out.println("<td>" + r.getTem() + "</td>");
                                    }
                                    if (r.getHum() != null) {
                                        out.println("<td>"+ r.getHum() +"</td>");
                                    }
                                    if (r.getPa() != null) {
                                        out.println("<td>" + r.getPa() + "</td>");
                                    }
                                    if (r.getRain() != null) {
                                        out.println("<td>" + r.getRain() + "</td>");
                                    }
                                    if (r.getWin_dir() != null) {
                                        out.println("<td>" + r.getWin_dir() + "</td>");
                                    }        
                                    if (r.getWin_sp() != null) {
                                        out.println("<td>" + r.getWin_sp() + "</td>");
                                    }
                    %>                
                                    <td><%= r.getDate() %></td>
                                </tr>
                    
                    <%
                            
                            }
                    %>
                                
                        </table>    
                        
                        <!-- 分頁顯示div -->                                                                            
                        <div align="center">
                              <ul class="pagination" id="paginator"></ul>
                          </div>
                          
                          </form>                          
              
                    <%
                        }
                    %>            
            </div>
        </div>
    
         <script type='text/javascript'>
            var options = {
                    
                    bootstrapMajorVersion: 3,    //bootstrap版本
                    size: 'normal',
                    itemTexts: function (type, page, current) {
                        switch (type) {
                        case "first":
                            return "首頁";
                        case "prev":
                            return "<i class='fa fa-caret-left'></i> 上一頁";
                        case "next":
                            return "下一頁 <i class='fa fa-caret-right'></i>";
                        case "last":
                            return "末頁";
                        case "page":
                            return page;
                        }
                    },
                    tooltipTitles: function (type, page, current) {
                        switch (type) {
                        case "first":
                            return "首頁";
                        case "prev":
                            return "上一頁";
                        case "next":
                            return "下一頁";
                        case "last":
                            return "末頁";
                        case "page":
                            return "" + page + "";
                        }
                    },
                    pageUrl: function(type, page, current){
                        return "showInfoSearchResult.jsp?pageNoStr="+page;    //跳轉到選定頁面
                    },
                    numberOfPages: 6,    //顯示“第幾頁”的選項數目
                    currentPage: <%= pageNo %>,    //當前頁數
                    totalPages: <%= totalPages %>    //總頁數
                   }
    
            $('#paginator').bootstrapPaginator(options);
        </script>
    
    </body>
</html>

 

<
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C/C++程式通過動態鏈接庫調用MATLAB程式 1 MATLAB編譯器設置 需要設定對應的C++編譯器才能編譯.m文件生成可供C++調用的庫文件。 在MATLAB命令行輸入:mex –setup;然後繼續輸入:mbuild –setup,選擇已安裝的VC編譯器。 2 將MATLAB程式編譯成C/C ...
  • 在很多人的眼裡,C語言和linux常常是分不開的。這其中的原因很多,其中最重要的一部分我認為是linux本身就是C語言的傑出作品。當然,linux操作系統本身對C語言的支持也是相當到位的。作為一個真正的程式員來說,如果沒有在linux下麵用C語言編寫過完整的程式,那麼只能說他對C語言本身的理解還相關 ...
  • 客戶端: 1.服務端點 2.讀取客戶端已有的圖片數據 3.通過socket輸出流將數據發給服務端 4.讀取服務端反饋信息 5.關閉 獲取Socket對象,new出來,構造參數:String的服務端ip,int的埠號 調用Socket對象的getOutputStream()方法,得到OutputSt ...
  • J2SE 1.5提供了另一種形式的for迴圈。藉助這種形式的for迴圈,可以用更簡單地方式來遍曆數組和Collection等類型的對象。本文介紹使用這種迴圈的具體方式,說明如何自行定義能被這樣遍歷的類,並解釋和這一機制的一些常見問題。 在Java程式中,要“逐一處理”――或者說,“遍歷”――某一個數 ...
  • 本文是我閱讀周志明老師《深入理解Java虛擬機-JVM高級特性與最佳實戰》章節2.2的學習筆記。更多內容,請參考原書。 Java虛擬機在執行Java程式時會將其所管理的記憶體劃分為若幹個不同的數據區域,這些區域有各自的用途及生命周期。具體而言包括以下幾個區域。 1. 程式計數器 一塊較小的記憶體空間,可 ...
  • 原文地址:http://blog.csdn.net/cq361106306/article/details/38736551 synchronized--同步 顧名思義是用於同步互斥的作用的。 這裡精簡的記一下它的使用方法以及意義: 當synchronized修飾this或者非靜態方法或者是一個實例... ...
  • synchronized 關鍵字,它包括兩種用法:synchronized 方法和 synchronized 塊。 1. synchronized 方法:通過在方法聲明中加入 synchronized關鍵字來聲明 synchronized 方法。如:public synchronized void ...
  • △abstract不可以修飾成員變數 △一個類可以沒有抽象方法,可以定義為抽象類,這樣的目的是不能讓其他類建立本類對象,交給子類完成. △abstract和static(可以被類名調用方法,但是抽象方法調用沒有意義)final(不能被覆蓋方法)private(私有方法無法覆蓋) △介面只能被實現.被 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...