需求:

每页列表下都有一个分页的功能,显示总数量、当前页/总页数、首页、上一页、下一页、最后一页、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. Java 基础【10】 I/O流概念分析整理

    转载地址:http://blog.csdn.net/yuebinghaoyuan/article/details/7388059 java.io 中的流,可以从不同的角度进行分类. 按照数据流的方向不 ...

  2. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  3. .Net分布式异常报警系统-项目介绍

    后台管理  首页统计的是当天每个时段的异常数量, 使用的是echarts组件, 红框所示, 可以选择不同的系统进行查看.     得益于echarts的强大功能, 你可以使用柱状图来查看.     站 ...

  4. SQL 2014 in-memory中的storage部分

    基于CTP1的官方白皮书,自己理解的内容.白皮书下载地址:http://download.microsoft.com/download/F/5/0/F5096A71-3C31-4E9F-864E-A6 ...

  5. AlertDialog之常见对话框(单选对话框、多选对话框、进度条对话框)

    单选对话框,顾名思义就是只能选一项(setSingleChoiceItems(Items,)) public void click(View v){ //创建对话框类 AlertDialog.Buil ...

  6. 屠龙之路_向恶龙Alpha进发_FirstDay

    听说山的那边海的那边,出现了一头名为Alpha的恶龙,此龙无恶不作,还掠走了国王那漂酿的公主.少年很是气愤,大吼:"放开那女孩!!!",于是找到了志同道合的六位勇士,一起组成了屠龙 ...

  7. webservice的常用注解

    定义说明书的显示方法1.@WebService(serviceName="PojoService", portName="PojoPort", name=&qu ...

  8. 【COGS 254】【POI 2001】交通网络图

    http://www.cogs.top/cogs/problem/problem.php?pid=254 dist[i]表示能最早到达i点的时间.这样就可以用最短路模型来转移了. #include&l ...

  9. 通过自定义Attribute及泛型extension封装数据验证过程

    需求来源: 在日常工作中,业务流程往往就是大量持续的数据流转.加工.展现过程,在这个过程中,不可避免的就是数据验证的工作.数据验证工作是个很枯燥的重复劳动,没有什么技术含量,需要的就是对业务流程的准确 ...

  10. Extjs-Ext.Ajax.request设置超时

    ExtJs的Ajax提交主要是:Ext.Ajax.request或form1.getForm().submit,超时时间默认是30秒. 很多时候,后台处理比较多,往往需要超出30秒的限制.此时,可以通 ...