Jsp分页实例---假分页
今天总结一个JSP假分页的实例,由基本功能由js实现。
相较前一篇真分页中程序的功能,丰富了一些。具备首页尾页,和页面跳转功能。
首先还是来总结一下真假分页的优缺点和特性吧。
假分页:从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。
真分页:确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。
综上:如果数据量较小,使用假分页的效果会更优,如果数据量庞大,使用真分页的效果更优。
下面来列举一个假分页的实例。
先简述假分页的实现思路:
假分页是一次性读出表中所有的数据信息:
1.读出所有的信息在JSP页面绘成表格
2.利用JS写相关的函数控制表格的相关行的display属性显示隐藏。
3.具体我们需要知道数据项总条数。每页显示多少条数据。
4.根据以上这两个参数我们可以确定总页数。另外需要我们再定义一个变量作为当前页。
5.我们需要实现的功能是上一页,下一页,首页,尾页,页面跳转。
首页和尾页比较好实现:首页只需要将当前页置为一,再显示第一页数据即可,尾页只需要把当前页数置为尾页,再显示最后一页应该显示的信息项目。
上一页和下一页需要将当前页加1,显示相关页面的数据。
这些功能中,有一点需要格外注意,翻页后控件的能否使用。例如首页时首页和上一页不能使用,尾页时或者当前页最后一条数据为最后一条数据条目时,尾页和下一页不能使用。
源码中有比较详细的注释,此处就不再多做说明。
下面贴出相关源码:
servlet页面代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
StudentDao st = new StudentDao();
request.setAttribute("student",st.findAll());
request.getRequestDispatcher("student2.jsp").forward(request, response);
}
Jsp页面代码:
<body>
<table id="t_student" border="1" cellpadding="2" cellspacing="0" style="text-align:center;width:500px">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>电话</th>
<th>成绩</th>
</tr>
</thead>
<c:forEach items="${student}" var="st">
<tr>
<td>${st.getId()}</td>
<td>${st.getName()}</td>
<td>${st.getAge()}</td>
<td>${st.getPhone()}</td>
<td>${st.getScore()}</td>
</tr>
</c:forEach>
</table>
<div class="gridItem" style="padding: 5px; width: 250px; float: left; text-align: left; height: 20px; font-size: 15px;" >
共有 <span id="spanTotalInfor"></span> 条记录
当前第<span id="spanPageNum"></span>页
共<span id="spanTotalPage"></span>页
</div>
<div class="gridItem" style="margin-left:50px; padding: 5px; width: 400px; float: left; text-align: center; height: 20px; vertical-align: middle; font-size: 15px;">
<span id="spanFirst" >首页</span>
<span id="spanPre">上一页</span>
<span id="spanInput" style="margin: 0px; padding: 0px 0px 4px 0px; height:100%; ">
第<input id="Text1" type="text" class="TextBox" onkeyup="changepage()" style="height:20px; text-align: center;width:50px" />页
</span>
<span id="spanNext">下一页</span>
<span id="spanLast">尾页</span>
</div> <script type="text/javascript">
var theTable = document.getElementById("t_student");
var txtValue = document.getElementById("Text1").value;
function changepage() {
var txtValue2 = document.getElementById("Text1").value;
if (txtValue != txtValue2) {
if (txtValue2 > pageCount()) { }
else if (txtValue2 <= 0) { }
else if (txtValue2 == 1) {
first();
}
else if (txtValue2 == pageCount()) {
last();
}
else {
hideTable();
page = txtValue2;
pageNum2.value = page; currentRow = pageSize * page;
maxRow = currentRow - pageSize;
if (currentRow > numberRowsInTable) currentRow = numberRowsInTable;
for (var i = maxRow; i < currentRow; i++) {
theTable.rows[i].style.display = '';
}
if (maxRow == 0) { preText(); firstText(); }
showPage();
nextLink();
lastLink();
preLink();
firstLink();
} txtValue = txtValue2;
}
} </script>
<script type="text/javascript" src="js/Pagging.js"></script> </body>
相关JS代码:
//获取对应控件
var totalPage = document.getElementById("spanTotalPage");//总页数
var pageNum = document.getElementById("spanPageNum");//当前页
var totalInfor = document.getElementById("spanTotalInfor");//记录总数
var pageNum2 = document.getElementById("Text1");//当前页文本框 var spanPre = document.getElementById("spanPre");//上一页
var spanNext = document.getElementById("spanNext");//下一页
var spanFirst = document.getElementById("spanFirst");//首页
var spanLast = document.getElementById("spanLast");//尾页
var pageSize = 5;//每页信息条数 var numberRowsInTable = theTable.rows.length-1;//表格最大行数 var page = 1; //下一页
function next() {
if (pageCount() <= 1) {
}
else {
hideTable();
currentRow = pageSize * page + 1; //下一页的第一行
maxRow = currentRow + pageSize; //下一页的一行
if (maxRow > numberRowsInTable) maxRow = numberRowsInTable+1;//如果计算中下一页最后一行大于实际最后一行行号
for (var i = currentRow; i < maxRow; i++) {
theTable.rows[i].style.display = '';
}
page++;
pageNum2.value = page;
if (maxRow == numberRowsInTable) { //如果下一页的最后一行是表格的最后一行
nextNoLink(); //下一页 和尾页 不点击
lastNoLink();
}
showPage();//更新page显示
if (page == pageCount()) {//如果当前页是尾页
nextNoLink();
lastNoLink();
} preLink();
firstLink();
}
} //上一页
function pre() {
if (pageCount() <= 1) {
}
else {
hideTable();
page--;
pageNum2.value = page;
currentRow = pageSize * page + 1;//下一页的第一行
maxRow = currentRow - pageSize;//本页的第一行
if (currentRow > numberRowsInTable) currentRow = numberRowsInTable;//如果计算中本页的第一行小于实际首页的第一行行号,则更正
for (var i = maxRow; i < currentRow; i++) {
theTable.rows[i].style.display = '';
}
if (maxRow == 0) { preNoLink(); firstNoLink(); }
showPage();//更新page显示
if (page == 1) {
firstNoLink();
preNoLink();
}
nextLink();
lastLink();
}
} //第一页
function first() { if (pageCount() <= 1) {
}
else {
hideTable();//隐藏所有行
page = 1;
pageNum2.value = page;
for (var i = 1; i < pageSize+1; i++) {//显示第一页的信息
theTable.rows[i].style.display = '';
}
showPage();//设置当前页 firstNoLink();
preNoLink();
nextLink();
lastLink();
}
} //最后一页
function last() {
if (pageCount() <= 1) {
}
else {
hideTable();//隐藏所有行
page = pageCount();//将当前页设置为最大页数
pageNum2.value = page;
currentRow = pageSize * (page - 1)+1;//获取最后一页的第一行行号
for (var i = currentRow; i < numberRowsInTable+1; i++) {//显示表格中最后一页信息
theTable.rows[i].style.display = '';
} showPage();
lastNoLink();
nextNoLink();
preLink();
firstLink();
}
} function hideTable() {//隐藏表格内容
for (var i = 0; i < numberRowsInTable+1; i++) {
theTable.rows[i].style.display = 'none';
}
theTable.rows[0].style.display = '';//标题栏显示
} function showPage() {//设置当前页数
pageNum.innerHTML = page;
} function inforCount() {//设置总记录数
spanTotalInfor.innerHTML = numberRowsInTable;
} //总共页数
function pageCount() {
var count = 0;
if (numberRowsInTable % pageSize != 0) count = 1;
return parseInt(numberRowsInTable / pageSize) + count;
} //显示链接 link方法将相应的文字变成可点击翻页的 nolink方法将对应的文字变成不可点击的
function preLink() { spanPre.innerHTML = "<a href='javascript:pre();'>上一页</a>"; }
function preNoLink(){ spanPre.innerHTML = "上一页"; } function nextLink() { spanNext.innerHTML = "<a href='javascript:next();'>下一页</a>"; }
function nextNoLink(){ spanNext.innerHTML = "下一页";} function firstLink() { spanFirst.innerHTML = "<a href='javascript:first();'>首页</a>"; }
function firstNoLink(){ spanFirst.innerHTML = "首页";} function lastLink() { spanLast.innerHTML = "<a href='javascript:last();'>尾页</a>"; }
function lastNoLink(){ spanLast.innerHTML = "尾页";} //初始化表格
function hide() {
for (var i = pageSize + 1; i < numberRowsInTable+1 ; i++) {
theTable.rows[i].style.display = 'none';
}
theTable.rows[0].style.display = ''; inforCount(); totalPage.innerHTML = pageCount();
showPage();
pageNum2.value = page; if (pageCount() > 1) {
nextLink();
lastLink();
} } hide();
Jsp分页实例---假分页的更多相关文章
- Jsp分页实例---真分页
网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...
- java分页之假分页
假分页,顾名思义,不是真正的在数据库里进行过滤,而是从数据库查询之后,取得全部结果,在展现的时候做些手脚. import java.util.ArrayList; import java.util.L ...
- PHP+mysql数据库简单分页实例-sql分页
前几天冷月写了一篇博文<php基础编程-php连接mysql数据库-mysqli的简单使用>,很多小伙伴在学习后都知道了php与mysql数据库的连接,今天冷月分享一个简单的分页实例 首先 ...
- asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题
刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...
- jsp 假分页的实现
原本做毕设做了一堆表格需要读出数据.为了以后的数据可能会很多做准备,这里实现一个以基于jsp页面实现的假分页. 假分页:实际上数据库一次过把所有数据读出来,通过对输出展示的控制来实现对数据分页的假象. ...
- ASP.NET(四):ASP.net实现假分页显示数据
导读:在做数据查询的时候,有的时候查询到的数据有很多.通常呢,我们一般都是去拖动右侧边的滚动条.但是,有了分页后,我们就可以不必是使用滚动条,而直接通过分页查看我们想要的数据.在分页的过程中,有分为真 ...
- easyUI datagrid 前端假分页
datagrid有两种分页方式,真分页和假分页. 所谓真分页,就是真的每次只获取一张分页的数据. 所谓假分页,就是将所有数据全部获取下来,然后利用其分页控件进行分页. 下面具体说说假分页: 1.dat ...
- jsp假分页
假分页:从数据库中取出所有的数据,然后分页在界面上显示.访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接.快速的,避免对数据库的多次访问. 真分页:确定要 ...
- java:(json,ajax,path,Oracle的分页实例,Filter拦截器)
1.json: <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...
随机推荐
- golang(2):beego 环境搭建
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46695513 转载请一定注明出处. 1,关于beego beego是一个用Go开 ...
- 在TextBox里面仅仅允许数字,按Enter键进入下一个TextBox
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...
- 关于SOQL(一)
SOQL 是Salesforce中的查询语言,他的全称是Salesforce Object Query Language. 从字面上就能够看出,这个语言是一种基于对象的查询语言. 在Salesforc ...
- linux kernel中timer的使用
linux kernel中timer的使用 http://blog.csdn.net/njuitjf/article/details/16888821 在kernel中如果想周期性的干些什么事情,或者 ...
- 「OC」类的深入研究、description方法和sel
一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...
- IOC容器初始化——BeanDefinition的Resource定位
以编程的方式使用DefaultListableBeanFactory时,首先定义一个Resource来定位容器使用的BeanDefinition.这是使用的是ClassPathResource,意味着 ...
- spoj 3871 gcd extreme
题目大意给出一个n,求sum(gcd(i,j),<i<j<=n); 可以明显的看出来s[n]=s[n-]+f[n]; f[n]=sum(gcd(i,n),<i<n); 现 ...
- Nginx阅读笔记(二)之location的用法
两个配置文件 一: server { listen 80; # # 在本机所有ip上监听80,也可以写为192.168.1.202:80,这样的话,就只监听192.168.1.202上的80口 ser ...
- shell学习之字符串处理
1.获取字符串长度 value=abcd;echo ${#value} 输出:42.获取子串 value=abcd;:} 输出:d value:a:b,其中a表示起始位置,b表示获取的子串的长度. 3 ...
- UVA 10057 A mid-summer night's dream. 仲夏夜之梦 求中位数
题意:求中位数,以及能成为中位数的数的个数,以及选择不同中位数中间的可能性. 也就是说当数组个数为奇数时,中位数就只有一个,中间那个以及中位数相等的数都能成为中位数,选择的中位数就只有一种可能:如果为 ...