需求:

每页列表下都有一个分页的功能,显示总数量、当前页/总页数、首页、上一页、下一页、最后一页、GO到第几页

效果动态图:

实现思路:

因为每个列表页都需要,在每个出列表页数据的servlet中都要求出总数量、当前页、总页数、结果list这几个值,那么我就把这些变量封装到一个基本实体类中,然后在service实现类中去求出这些变量的算法,那么我servlet执行时候,只用获取页面当前页的值,就可以算出所有变量的值。说的有点不清晰,那么我们直接上代码吧!

首先我们先看一下JSP的页面结构:

列表页newsDetailList.jsp:

底部调用公共分页的jsp

 <!--隐藏域,当前页码  -->
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<input type="hidden" id="totalPageCount" name="totalPageCount" value="${totalPageCount }"/>
<c:import url="rollPage.jsp">
<c:param name="totalCount" value="${totalCount }"></c:param>
<c:param name="currentPageNo" value="${currentPageNo }"></c:param>
<c:param name="totalPageCount" value="${totalPageCount}"></c:param> </c:import>

上面当前页的设置为隐藏域,只是为了获取当前在第几页这个数据,用来算出其它几个值。

totalPageCount的隐藏域是为了执行输入页面GO到相应页的操作

看一下rollPage.jsp:

 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function page_nav(frm,num){
frm.pageIndex.value=num;
frm.submit();
} function go(frm,pageno){
//var regexp=/^\d+$/;
var regexp=/^[1-9]\d*$/;
var totalPage = document.getElementById("totalPageCount").value;
if(!regexp.test(pageno)){
alert("请输入 正确的数字!");
return false;
}else if((pageno-totalPageCount) > 0){
alert("总页码一共"+totalPageCount+"页,请输入正确的页码!");
return false;
}else{
page_nav(frm,pageno);
} } </script>
</head> <body> <div class="page-bar">
<ul class="page-num-ul clearfix">
<li>共${param.totalCount}条记录&nbsp;&nbsp;
${param.currentPageNo}/${param.totalPageCount }页</li>&nbsp;&nbsp;
<c:if test="${param.currentPageNo>1}">
<a href="javaScript:page_nav(document.forms[0],1)">首页</a>&nbsp;&nbsp;
<a
href="javaScript:page_nav(document.forms[0],${param.currentPageNo-1});">上一页</a>&nbsp;&nbsp;
</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>
</ul>
<span class="page-go-form"><label>跳转至</label> <input
type="text" name="inputPage" id="inputPage" class="page-key" value="" />页 <button type="submit" class="page-btn"
onclick='go(document.forms[0],document.getElementById("inputPage").value)'>GO</button> </span>
</div>
</body>
</html>

这个公共的分页,作用:控制分页界面的显示及提交到当前选择的页码

后端DAO实体类:

package com.cn.pb.dao.util;

import java.sql.Connection;
import java.util.List; public class PageBase<M> {
//当前页码,默认为第1页
private int currentPageNo =1;
//总页数
private int totalPageCount;
//总记录数
private int totalCount;
//页面容量
private int pageSize=5;
//上一页
private int upPageNo;
//下一页
private int nextPageNo; //一页的结果
private List<M> list; public int getUpPageNo() {
return upPageNo;
}
public void setUpPageNo(int upPageNo) {
//如果当前页>1
if(this.currentPageNo>1){
this.upPageNo = this.currentPageNo-1;
} }
public int getNextPageNo() {
return nextPageNo;
}
public void setNextPageNo(int nextPageNo) {
//如果当前页>0且小于总页数,则可以有下一页
if(this.currentPageNo>0 &&this.currentPageNo<this.totalPageCount){
this.nextPageNo = currentPageNo+1;
} }
public List<M> getList() {
return list;
}
public void setList(List<M> list) {
this.list = list;
}
public int getCurrentPageNo() {
return currentPageNo;
}
//如果当前页码大于0才设置当前页码值
public void setCurrentPageNo(int currentPageNo) {
if(currentPageNo>0){
this.currentPageNo = currentPageNo;
} } public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
if(totalCount>0){
this.totalCount = totalCount;
} }
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize >0){
this.pageSize = pageSize;
} } public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
if(this.getTotalCount()%this.pageSize==0){
this.totalPageCount = this.getTotalCount()/this.pageSize;
}else if(this.getTotalCount()%this.pageSize>0){
this.totalPageCount = this.getTotalCount()/this.pageSize +1 ;
}else{
this.totalPageCount =0;
}
} /*//设置总页数
public void setTotalPageCount(int ) {
if(this.getTotalCount()%this.pageSize==0){
this.totalPageCount = this.getTotalCount()/this.pageSize;
}else if(this.getTotalCount()%this.pageSize>0){
this.totalPageCount = this.getTotalCount()/this.pageSize +1 ;
}else{
this.totalPageCount =0;
} }
*/ }

service接口:

 //分页和list独立出一个javabean
public PageBase<NewsDetail> getPages(int pageNo,String where);

service实现类:

 public PageBase<NewsDetail> getPages(int pageNo,
String where) {
PageBase<NewsDetail> pb=new PageBase<NewsDetail>();
pb.setCurrentPageNo(pageNo);
pb.setTotalCount(this.getNewsCount(where));
pb.setTotalPageCount(pb.getTotalCount()/pb.getPageSize());
pb.setNextPageNo(pageNo-1);
pb.setUpPageNo(pageNo+1);
pb.setList(this.getPageNewsList(pageNo, pb.getPageSize(), where));
return pb;
}

web.xml

 <servlet>
<servlet-name>newsListByLikeServlet</servlet-name>
<servlet-class>com.cn.pb.servlet.NewsListByLike3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>newsListByLikeServlet</servlet-name>
<url-pattern>/servlet/newsListServlet</url-pattern>
</servlet-mapping>

其实也就是把我上一篇<JSP+Servlet+javabean实现页面多条件模糊查询>中servlet那部分分页和求结果list给抽出来封装了,好吧,我只是改了web.xml中的类名,其它地方啥都不用改。可以多个servlet切着来

JSP+JavaBean+Servlet实现各类列表分页功能的更多相关文章

  1. Struts与jsp+javabean+servlet区别

    采用Struts框架技术和直接使用jsp+javabean技术开发各有什么优势?各自的缺点又是什么? 在Javaweb开发领域存在2种开发模式, 模式一,jsp+javabean 模式二,jsp+ja ...

  2. JSP+JavaBean+Servlet技术(MVC模型)

    一,Servlet开发用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种 ...

  3. JSP+JavaBean+Servlet工作原理实例…

    JSP+JavaBean+Servlet工作原理实例讲解 首先,JavaBean和Servlet虽都是Java程序,但是是完全不同的两个概念.引用mz3226960提出的MVC的概念,即M-model ...

  4. mxonline实战8,机构列表分页功能,以及按条件筛选功能

    对应github地址:列表分页和按条件筛选     一. 列表分页   1. pip install django-pure-pagination   2. settings.py中 install ...

  5. JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理

    Oracle库中userinfo表borth字段是Date类型,age年纪字段是int类型.age字段要根据borth来自动计算 先说一下我遇到的问题: insert into的时候遇到日期转换类型错 ...

  6. CRM-展示列表,分页功能

    目录 一.admin (创建超级用户) 二.展示列表 三.分页(封装成类)   一.admin (创建超级用户) 1.注册: 1.创建一个超级管理员,使用如下命令: python manage.py ...

  7. 如何开发简单的javaweb项目,jsp+javabean+servlet

    一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并配置apache-tomcat(服务器). 4.下载MySQL(数据库). 5.下载Navicat for M ...

  8. JSP + JavaBean + Servlet实现MVC设计模式

    1.流程图: 2.代码清单 数据库脚本: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `userid` ) NOT NULL, `name` ...

  9. 【原】django实现列表分页功能

    在view.py里添加分页查询方法: from django.http import JsonResponse from django.views.decorators.http import req ...

随机推荐

  1. APP架子迁移指南(二)

    接上一篇,这一篇开始用android来解释MVP概念.八股式的架子结构和命名规范.我在准备这篇文章的时候还看到不少在MVP基础上衍生的架子思路,底子是MVP没错,但命名有区别.复杂度变了.架子也用到了 ...

  2. ASP.NET XmlSerializer权限问题

    今天碰到一个奇怪问题.因为在2台服务器上做文件共享,使服务器A能访问服务器B的共享目录.在IIS上使用虚拟目录实现的话,需要给应用程序池指定一个统一的账号.在调试的时候能够使用,但是一部署到服务器上, ...

  3. 系统升级日记(3)- 升级SharePoint解决方案和Infopath

    最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...

  4. 也来山寨一版Flappy Bird (js版)

    随着Flappy Bird的火爆,各种实现的版也不断出现,于是也手痒简单实现了一版. 其实本来只是想实现一下这只笨鸟的飞翔运动的,后来没忍住,就直接实现一个完整游戏了…… 因为这个游戏本身实现起来就没 ...

  5. 3DMax 常用快捷键

    视图切换: T 顶视图 F 前视图, B后视图,L-左视图,右视图因为R键是另外一个功能, 所以是V+R 线框视图切换F3, 实体线框同时出现 F4 模型复位Z P透视图 在透视图的情况下: 鼠标中间 ...

  6. libsvm使用详细说明

    一,简介 LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量机的库,这套库运算速度还是挺快的,因此成为目前国内应用最多的SVM的库.详细的使用说明及博主博客见下链接: ...

  7. yii2组件之下拉框带搜索功能(yii-select2)

    简单的小功能,但是用起来还是蛮爽的.分享出来让更多的人有更快的开发效率,开开心心快乐编程. 如果你还没有使用过composer,你可就out了,看我的教程分享,composer简直就是必备神奇有木有. ...

  8. linux基础-第六单元 用户、群组和权限

    用户及passwd文件 /etc/passwd文件的功能 /etc/passwd文件每个字段的具体含义 shadow文件 /etc/shadow文件的功能 /etc/shadow文件每个字段的具体含义 ...

  9. Day One(Beta)

    站立式会议 站立式会议内容总结 331 今天:自己摸索了BaseAdapter删除元素的三种方式更新效率逐步上升 明天:学习webkit的webview的使用 442 今天:书籍评价界面,计划删除功能 ...

  10. 怎样设置Word下次打开时跳转到上次阅读的位置

    ①我们启动Word2013,打开需要阅读的文档,当阅读完毕之后,在指定位置键入一个空格,然后按下Delete键删除,这样相当于是没有作任何更改. ②保存文档,单击文件--另存为,选择好路径,将文档保存 ...