【JavaWeb】Servlet+JSP 實現分頁功能

文章目錄

  • 思路
    • 數據抽出
    • 功能設計
  • 功能模塊
    • 工具類
    • 前端內容
    • 用戶端數據處理

思路

數據抽出

  1. 需要顯示的數據,查詢的數據抽出;
  2. 進行分頁顯示,需要統計抽出的件數,然后根據頁面顯示尺寸調整顯示頁面內容;

功能設計

  1. 翻頁需要包含的內容:
    1. 首頁/尾頁
    2. 上一頁/下一頁
    3. 頁碼跳轉,指定頁跳轉
  2. 需要有的參數:
    1. 當前頁碼
    2. 總頁數
    3. 當前頁所顯示的件數
    4. 總件數
    5. 顯示內容范圍:當前頁*頁面件數
  3. 需要計算頁面的件數和頁數:
    1. 當前件數不滿足頁面內容,顯示當前頁

功能模塊

工具類

  1. 定義基礎參數
private int pageIndex = 1; // 當前頁碼
private int pageSize; // 總頁數
private int totalCount;  // 總記錄數
private int totalPageCount; // 每頁顯示的記錄數
  1. 生成相關的getter、setter方法,調整相關方法的實現,賦值到時候一定要考慮到異常規避
    /*** 獲取當前頁碼* @return pageIndex*/public int getPageIndex() {return pageIndex;}/*** 設置當前頁* @param pageIndex 當前頁碼*/public void setPageIndex(int pageIndex) {if (pageIndex > 0) {this.pageIndex = pageIndex;}}/*** 獲取每頁顯示的記錄數* @return pageSize*/public int getPageSize() {return pageSize;}/*** 設置每頁顯示的記錄數* @param pageSize*/public void setPageSize(int pageSize) {if (pageSize > 0) {this.pageSize = pageSize;} else {this.pageSize = 10;}}/*** 獲取總記錄數* @return totalCount*/public int getTotalCount() {return totalCount;}/*** 設置總記錄數* @param totalCount 總記錄數*/public void setTotalCount(int totalCount) {if (totalCount > 0) {this.totalCount = totalCount;setByPageNo(totalCount);}}/*** 獲取總頁數* @return totalPageCount*/public int getTotalPageCount() {return totalPageCount;}/*** 設置總頁數* @param totalPageCount 總頁數*/public void setTotalPageCount(int totalPageCount) {this.totalPageCount = totalPageCount;}
  1. 設置頁數,在獲取件數之后計算當前頁數。需要防止非法字符越界等操作
    /*** 根據總記錄數設置總頁數* 此方法用于計算分頁時的總頁數,基于當前的每頁記錄數(pageSize)** @param totalCount 總記錄數,即需要分頁處理的數據總量*/private void setByPageNo(int totalCount) {if (this.pageSize <= 0) {this.pageSize = 10; // 防止非法值影響計算}// 計算總頁數:如果總記錄數除以每頁記錄數的余數為0,則總頁數為總記錄數除以每頁記錄數;// 否則,總頁數為總記錄數除以每頁記錄數加1this.totalPageCount = totalCount % pageSize == 0 ? totalCount / pageSize :totalCount / pageSize + 1;}

前端內容

  1. 導入共同的翻頁式樣,設置hidden項:保存當前的頁面件數
<div><table><li></li><li></li></table><input type="hidden" id="totalPageCount" value="${totalPageCount}"/><c:import url="rollpage.jsp"><c:param name="totalCount" value="${totalCount}"/><c:param name="currentPageNo" value="${currentPageNo}"/><c:param name="totalPageCount" value="${totalPageCount}"/></c:import>
</div>
  1. 調用的翻頁jsp如下:文本輸入框需要檢查非法字符
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript"></script>
</head>
<body><div class="page-bar"><ul class="page-num-ul clearfix"><li>共${param.totalCount }條記錄&nbsp;&nbsp; ${param.currentPageNo }/${param.totalPageCount }頁</li><c:if test="${param.currentPageNo > 1}"><a href="javascript:page_nav(document.forms[0],1);">首頁</a><a href="javascript:page_nav(document.forms[0],${param.currentPageNo-1});">上一頁</a></c:if><c:if test="${param.currentPageNo < param.totalPageCount }"><a href="javascript:page_nav(document.forms[0],${param.currentPageNo+1 });">下一頁</a><a href="javascript:page_nav(document.forms[0],${param.totalPageCount });">最后一頁</a></c:if>&nbsp;&nbsp;</ul><span class="page-go-form"><label>跳轉至</label><input type="text" name="inputPage" id="inputPage" class="page-key" /><button type="button" class="page-btn" onClick='jump_to(document.forms[0],document.getElementById("inputPage").value)'>GO</button></span></div>
</body>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/rollpage.js"></script>
</html>
  1. JS代碼如下,檢查非法字符
function page_nav(frm,num){frm.pageIndex.value = num;frm.submit();
}function jump_to(frm,num){//alert(num);//驗證用戶的輸入const regexp = /^[1-9]\d*$/;let totalPageCount = document.getElementById("totalPageCount").value;//alert(totalPageCount);if(!regexp.test(num)){alert("請輸入大于0的正整數!");return false;}else if((num-totalPageCount) > 0){alert("請輸入小于總頁數的頁碼");return false;}else{page_nav(frm,num);}
}

用戶端數據處理

  1. Servlet
 private void query(HttpServletRequest req, HttpServletResponse resp) {// 默認分頁設置int currentPageNo = 1;int pageSize = 5;// 獲取request請求路徑中當前頁碼參數    String pageIndex = req.getParameter("pageIndex");// 非空驗證,如果參數頁碼為空顯示默認頁數currentPageNo = pageIndex == null ? currentPageNo : Integer.parseInt(pageIndex);// 創建UserService實例UserService userService = new UserServiceImpl();List<User> userList;// 獲取用戶總數,用于分頁int totalCount = userService.getUserCount(queryUserName, queryUserRole);// 創建并配置PageSupport對象PageSupport pageSupport = new PageSupport();// 設置分頁當前頁碼pageSupport.setPageIndex(currentPageNo);// 設置分頁總頁數pageSupport.setPageSize(pageSize);// 設置分頁總數pageSupport.setTotalCount(totalCount);// 計算總頁數int totalPageCount = pageSupport.getTotalPageCount();// 校驗當前頁碼if (currentPageNo < 1) {currentPageNo = 1;} else if (currentPageNo > totalPageCount) {currentPageNo = totalPageCount;}// 根據查詢條件和分頁信息獲取用戶列表userList = userService.getUserList(queryUserName, queryUserRole, currentPageNo, pageSize);// 將用戶列表和其他信息存儲在請求對象中req.setAttribute("userList", userList);req.setAttribute("totalCount", totalCount);req.setAttribute("currentPageNo", currentPageNo);req.setAttribute("totalPageCount", totalPageCount);// 將內容轉發到list頁面進行內容顯示req.getRequestDispatcher("/jsp/userlist.jsp").forward(req, resp);}
  1. Dao

// 定義SQL語句,將翻頁的數據條數 反映到SQL中,每次翻頁進行一次DB交互
StringBuilder sql = new StringBuilder();
// 查詢數據通過條件最后進行排序,篩選從哪一條開始到多少條
sql.append("select u.*, r.roleName as userRoleName from smbms_user u, smbms_role r where " +"u.userRole = r.id");
sql.append(" order by createDate DESC limit ?, ?");// 準備SQL語句執行
preparedStatement = connection.prepareStatement(sql.toString());// 定義參數,防止SQL注入導致異常
// currentPageNo 當前頁碼
// pageSize      每頁數量
List<Object> list = new ArrayList<>();
// 計算上一頁的最后一件
currentPageNo = (currentPageNo - 1) * pageSize;
list.add(currentPageNo);
list.add(pageSize);// 返回查詢結構
ResultSet rs = BaseDao.executeQuery(connection, String.valueOf(sql), preparedStatement, params, rs);while (rs.next()) {// 內容賦值,賦值到要顯示的對象中}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85716.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot-準備工作-工程搭建

目錄 1.創建空項目 2.檢查項目jdk版本 3.檢查Maven的全局配置 4.配置項目的字符集 5.創建SpringBoot工程 1.創建空項目 2.檢查項目jdk版本 3.檢查Maven的全局配置 4.配置項目的字符集 5.創建SpringBoot工程

01、python實現matlab的插值算法,以及驗證

import numpy as np from scipy.interpolate import griddata import sys def griddata_wrapper(x, y, v, xq, yq, method): """ 包裝scipy的griddata函數,支持單個點或多個點的插值 """ try: # 將輸入轉換為numpy數組…

React ahooks——useRequest

目錄 簡介 1. 核心功能 2. 基本用法 3. 高級用法 &#xff08;1&#xff09;輪詢請求&#xff08;Polling&#xff09; &#xff08;2&#xff09;防抖&#xff08;Debounce&#xff09; &#xff08;3&#xff09;依賴刷新&#xff08;refreshDeps&#xff09; &#x…

re正則、Xpath、BeautifulSouplxml 區別

目錄 1. re 正則表達式2. XPath3. BeautifulSoup + lxml4. 功能特性對比5.對比與建議在網頁數據解析中,正則表達式(re)XPath(常結合lxml)BeautifulSoup(常依賴解析器如lxml)是三種主流技術,各有核心差異和適用場景。 1. re 正則表達式 優勢:文本匹配效率高,尤其適用于…

教師辦工專用 資源包|課件+手抄報+PPT模板+常用表格 PDF格式93GB

如果家里親戚或朋友有走上教育之路的人&#xff0c;給他這份整合可以減輕不少工作負擔&#xff0c;更快地適應教育的節奏。也可以發給孩子的老師讓他在平時做個班級活動的參考 《老師教學辦工資源包》包括手抄報大全、教學計劃、工作總結、培訓手冊、課程表等教學、辦公常用資…

算法第37天| 完全背包\518. 零錢兌換 II\377. 組合總和 Ⅳ\57. 爬樓梯

完全背包 完全背包和01背包的區別 純完全背包&#xff0c;遍歷背包和物品的順序是可以對調的&#xff0c;只要求得出最大價值&#xff0c;不要求湊成總和的元素的順序&#xff1b; 01背包&#xff0c;遍歷背包和物品的順序是不可以對調的&#xff08;一維不行&#xff0c;二維…

七彩喜智慧康養平臺:重構銀發生活的數字守護網

隨著社會老齡化程度的不斷加深&#xff0c;如何讓老年人安享幸福晚年成為社會關注的焦點。 在這一背景下&#xff0c;七彩喜智慧康養平臺應運而生&#xff0c;以創新的科技手段和貼心的服務理念&#xff0c;為老年人的生活帶來了諸多好處&#xff0c;發揮著重要作用&#xff0…

【設計模式】用觀察者模式對比事件訂閱(相機舉例)

&#x1f4f7; 用觀察者模式對比事件訂閱(相機舉例) 標簽&#xff1a;WPF、C#、Halcon、設計模式、觀察者模式、事件機制 在日常開發中&#xff0c;我們經常使用 事件機制&#xff08;Event&#xff09; 來訂閱圖像采集信號。然而當系統日益復雜&#xff0c;多個模塊同時需要響…

【數據分析九:Association Rule】關聯分析

一、數據挖掘定義 數據挖掘&#xff1a; 從大量的數據中挖掘那些令人感興趣的、有用的、隱含的、先前未知的 和可能有用的 模式或知識 &#xff0c;并據此更好的服務人們的生活。 二、四類任務 數據分析有哪些任務&#xff1f; 今天我們來講述其中的關聯分析 三、關聯分析 典…

AWS Security Hub郵件告警設置

問題 需要給AWS Security Hub設置郵件告警。 前提 已經啟用AWS Security Hub。 AWS SNS 創建一個AWS Security Hub告警主題SecurityHub-Topic&#xff0c;如下圖&#xff1a; 創建完成后&#xff0c;訂閱該主題。 AWS EventBridge 設置規則名SecurityHubFindings-Rules…

(OSGB轉3DTiles強大工具)ModelSer--強大的實景三維數據分布式管理平臺

1. ModelSer 能幫我們做什么 1.1 最快速的 osgb 發布 3dtiles 服務 測試的速度大于 10G/分鐘&#xff0c;且速度基本是線性的&#xff08;100G10分鐘&#xff0c;1T100分鐘&#xff09;。支持城市級傾斜數據半天內完成服務發布&#xff0c;并支持數據的單塊更新。 1.2 支持所見…

《HTTP權威指南》 第5-6章 Web服務器和代理

基本Web服務器請求的步驟 1、建立連接 接受一個客戶端連接&#xff0c;或者如果不希望與這個客戶端建立連接&#xff0c;就將其關閉。 處理新連接客戶端主機名識別&#xff1a;反向DNS查找&#xff0c;將IP地址轉換為客戶端主機名過ident確定客戶端用戶&#xff1a;客戶端支持…

微信二次開發,對接智能客服邏輯

接口友情鏈接&#xff0c;點擊即可訪問。 ## 設備創建與復用機制 首次調用/login/getLoginQrCode需傳空appId觸發設備創建&#xff0c;響應返回固定設備ID。后續登錄必須復用此ID以避免風控&#xff08;同一微信號綁定固定設備&#xff09;。設備類型可選ipad/mac&#xff0c;當…

網站并發訪問量達到1萬以上需要注意哪些事項

當網站并發訪問量達到1萬以上時&#xff0c;需要注意以下幾個方面?&#xff1a; ?服務器硬件配置?&#xff1a; ?處理器&#xff08;CPU&#xff09;?&#xff1a;選擇多核、高頻率的CPU&#xff0c;以確保服務器能夠高效地處理大量的請求。?內存&#xff08;RAM&#xf…

二、OpenCV的第一個程序

文章目錄 一、第一個程序&#xff1a;顯示圖片1.1 cv::imread1.2 cv::namedWindow1.3 cv::imshow 二、第二個程序&#xff1a;視頻2.1 cv::VideoCapture 三、加入了滑動條的基本瀏覽窗口 一、第一個程序&#xff1a;顯示圖片 示例&#xff1a;一個簡單的加載并顯示圖像的OpenC…

第14次:商品列表、熱銷商品及詳情

第1步&#xff1a;定義獲取商品列表的視圖類ListView&#xff0c;本視圖中完成了如下功能&#xff1a; 根據商品類別id獲取商品類別信息&#xff0c;并根據類別信息反向查詢到所有的該類別的商品。根據頁號和排序方式兩個參數&#xff0c;獲取某個頁面的商品列表信息。 #good…

基于雙層注意力重加權 LSTM 的中文長文本謠言檢測模型

文章目錄 1.摘要2.介紹3.相關工作3.1 假新聞檢測數據集3.2 假新聞檢測方法3.3 長文本假新聞檢測的挑戰與進展3.4 與現有方法的區別 4.方法4.1 模型結構4.2模型代碼4.3 損失函數與優化方法 5. 實驗5.1 數據集與預處理5.2 實驗設置5.3 實驗結果5.4 對比分析5.5 結果分析與討論 6.…

在 MyBatis 的xml中,什么時候大于號和小于號可以不用轉義

在 MyBatis 中&#xff0c;< 和 > ?在動態 SQL 標簽內部? 無需轉義的功能是在以下版本引入的&#xff1a; &#x1f4cc; 關鍵版本說明 版本支持情況注意事項?MyBatis 3.3.0??? 在 <if>、<where>、<set> 等動態 SQL 標簽內部可直接使用 < 和…

Redis 的穿透、雪崩、擊穿

Redis 的穿透、雪崩、擊穿 1、緩存穿透 定義 緩存穿透是指查詢一個不存在的數據&#xff0c;由于緩存中沒有該數據&#xff0c;每次請求都會直接訪問數據庫&#xff0c;導致數據庫壓力過大 產生原因 惡意攻擊&#xff1a;攻擊者故意請求大量不存在的key&#xff0c;導致請求直…

有道翻譯官手機版:智能翻譯,隨行助手

在當今全球化的時代&#xff0c;語言不再是交流的障礙。無論是學習外語、出國旅游、商務出差還是日常交流&#xff0c;一款高效、準確的翻譯軟件都能成為我們的好幫手。有道翻譯官手機版正是這樣一款功能強大、操作便捷的語言翻譯軟件&#xff0c;它憑借先進的翻譯技術和豐富的…