数据的分页处理
时间:2022-05-08
本文章向大家介绍数据的分页处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
当页面中要显示的内容过多需要分多页显示、或是数据量过大内存吃不消时,需要分页处理。
原理:每次从数据库中取出一定量的数据,通过jsp页面显示
实现:
①写一个类封装分页的页面
②从数据库中取出一个页面的数据,将信息封装到分页页面对象中
③根据情况,将分页的页面对象设置到request对象、session对象或servletContext对象属性中,供jsp页面调用
④在jsp页面中显示分页数据、分页页码、上一页下一页、跳转页面等
下面看具体代码:
分页页面Page类:
1 package cn.wzbrilliant.domain;
2
3 import java.util.List;
4
5 //界面上所有与分页有关的都找此类要
6 public class Page {
7 private List records;
8 private int pagesize = 10;//每页显示的记录条数
9 private int pagenum;//用户要看的页码即当前页码
10 private int totalpage;//总页数
11 private int startIndex;//每页开始记录的索引
12 private int totalrecords;//总记录条数
13
14 //显示的页码
15 private int startPage;
16 private int endPage;
17
18 public Page(int pagenum,int totalrecords){
19 this.pagenum = pagenum;
20 this.totalrecords = totalrecords;
21
22 //计算每页开始记录的索引
23 startIndex = (pagenum-1)*pagesize;
24 //计算总页数
25 totalpage = totalrecords%pagesize==0?totalrecords/pagesize:(totalrecords/pagesize+1);
26
27 //显示的页码
28 if(totalpage<=9){
29 startPage = 1;
30 endPage = totalpage;
31 }else{
32 startPage = pagenum-4;
33 endPage = pagenum+4;
34 if(startPage<1){
35 startPage = 1;
36 endPage = 9;
37 }
38 if(endPage>totalpage){
39 endPage = totalpage;
40 startPage = totalpage-8;
41 }
42 }
43 }
44
45 public List getRecords() {
46 return records;
47 }
48
49 public void setRecords(List records) {
50 this.records = records;
51 }
52
53 public int getPagesize() {
54 return pagesize;
55 }
56
57 public void setPagesize(int pagesize) {
58 this.pagesize = pagesize;
59 }
60 public int getPagenum() {
61 return pagenum;
62 }
63
64 public void setPagenum(int pagenum) {
65 this.pagenum = pagenum;
66 }
67
68 public int getTotalpage() {
69 return totalpage;
70 }
71
72 public void setTotalpage(int totalpage) {
73 this.totalpage = totalpage;
74 }
75
76 public int getStartIndex() {
77 return startIndex;
78 }
79 public void setStartIndex(int startIndex) {
80 this.startIndex = startIndex;
81 }
82
83 public int getTotalrecords() {
84 return totalrecords;
85 }
86
87 public void setTotalrecords(int totalrecords) {
88 this.totalrecords = totalrecords;
89 }
90
91 public int getStartPage() {
92 return startPage;
93 }
94
95 public void setStartPage(int startPage) {
96 this.startPage = startPage;
97 }
98
99 public int getEndPage() {
100 return endPage;
101 }
102
103 public void setEndPage(int endPage) {
104 this.endPage = endPage;
105 }
106
107 }
从数据库中取出一定条数的记录,此处以mysql为例,sql语句为select * from 表名 limit ?,? 两个问号分别为起始位置和结束位置
在jsp页面中显示分页页码、上一页下一页、跳转页面等的实现代码:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <!-- 分页的部分 -->
3 第${page.pagenum}页/共${page.totalpage}页
4 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet">首页</a>
5 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.pagenum-1==0?1:page.pagenum-1}">上一页</a>
6 <c:forEach begin="${page.startPage}" end="${page.endPage}" var="num">
7 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${num}">${num }</a>
8 </c:forEach>
9
10 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.pagenum+1>page.totalpage?page.totalpage:page.pagenum+1}">下一页</a>
11 <a href="${pageContext.request.contextPath}/servlet/ShowAllMessageServlet?pagenum=${page.totalpage}">尾页</a>
12 <select id="s1">
13 <c:forEach begin="1" end="${page.totalpage}" var="num">
14 <option value="${num}" ${page.pagenum==num?'selected="selected"':''}>${num}</option>
15 </c:forEach>
16 </select>
17 <a href="javascript:jump()">跳转</a>
18
19 <script type="text/javascript">
20 function jump(){
21 var num = document.getElementById("s1").value;
22 window.location.href="${pageContext.request.contextPath}/servlet/ShowAllCustomersServlet?pagenum="+num;
23 }
24 </script>
- 25.2 安装Docker
- 使用JDBC向Kudu表插入中文字符-cast的秘密
- 使用JDBC向Kudu表插入中文字符-双引号的秘密
- Yarn的JobHistory目录权限问题导致MapReduce作业异常
- 输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止
- Linux基础(day76)
- zabbix设置QQ邮箱告警
- 关于JSON CSRF的一些思考
- linux学习第七十篇:expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行命令
- linux学习第六十九篇:分发系统介绍,expect脚本远程登录,expect脚本远程执行命令,expect脚本传递参数
- linux学习第六十八篇:告警系统邮件引擎,运行告警系统
- linux学习第六十七篇:告警系统主脚本,告警系统配置文件,告警系统监控项目
- linux学习第六十六篇:shell中的函数,shell中的数组,告警系统需求分析
- linux学习第六十五篇:for循环,while循环, break跳出循环,continue结束本次循环
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- P1459 三值的排序 Sorting a Three-Valued
- P1457 城堡 The Castle 位运算+BFS+思维(难题,好题)
- PostgreSQL异常宕机重启时间超长
- C++ 重载运算符 继承 多态 (超详细)
- USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))
- POJ 3267为什么优先队列超时,DP就能过,难过
- 执行ALTER TABLE语句时如何避免长时间阻塞并发查询
- P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码
- Codeforce 140C (贪心+优先队列)补题
- CodeForces - 140A New Year Table (几何题)当时没想出来-----补题
- PostgreSQL vacuum可见性
- PostgreSQL VFD机制
- POJ 2136 Vertical Histogram(当时写的比较恶心,优化一下)
- PostgreSQL 12的可拔插存储引擎--表访问方法以及bloackholes案例
- POJ 2230 Watchcow 欧拉回路的DFS解法(模板题)