需求:

每页列表下都有一个分页的功能,显示总数量、当前页/总页数、首页、上一页、下一页、最后一页、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. JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理

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

  2. Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心...写登陆注册之前看见一篇很好的博文,没有收藏,然后找不到了. 前几天在知乎上看见一个问题,什么时候感觉最无力. 前两天一直想回答:尝试过google到的所有solve case,结果bug依 ...

  3. PHP+jQuery 列表分页类 ( 支持 url 分页 / ajax 分页 )

    /* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8.3.mi ...

  4. 分页功能的实现——Jdbc &amp;&amp; JSP

    @目录 什么是分页 ? 两个子模块功能的问题分析 和 解决方案 有条件查和无条件查询的影响 和 解决方案 项目案例: mysql + commons-dbutils+itcast-tools+Base ...

  5. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  6. Web---JSP注册技术的的演绎(3代)-JSP/EJB/Servlet/POJO/JavaBean

    我们可以这么理解JSP注册技术的发展过程: 第一代JSP技术:纯JSP开发. 第二代JSP技术:JSP+EJB开发. (EJB简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行.) 第三代J ...

  7. javabean+servlet+jsp程序_个人辛苦探索

    主要介绍主流的java web编程技术.设计模式和框架,以及如何利用Eclipese开发Web应用程序. 要点:1.Java Web编程的主要组件技术: 2.MVC设计模式: 3.用Eclipse构建 ...

  8. jsp 条件查询、列表分页

    条件查询 dao //根据搜索条件筛选数据 public List<User> GetUserBySearch(String userName, String sex) throws SQ ...

  9. MVC开发模式之Servlet+jsp+javaBean

    Servlet+jsp+JavaBean组合开发是一种MVC开发模式,控制器Controller采用Servlet.模型Model采用JavaBean.视图View采用JSP. 1.Web开发的请求- ...

随机推荐

  1. 烂泥:学习centos之快速搭建LNMP环境

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 以前在centos下安装软件都是喜欢源码安装,不过昨天因为一个事情需要一个centos 下的LNMP环境.反倒不会搞了,今天特意记录下,以备后续使用. 一 ...

  2. Spring-boot 开发Web应用

    动态修改Freemarker模版: 设置模版属性:   spring.freemarker.cache=false 启动应用方式有两种: a. 运行main()函数启动应用:则修改完模版文件后,需要把 ...

  3. (十三)WebGIS中工具栏的设计之命令模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 从这一章节开始我们将正式进入WebGIS的工具栏中相关功能的 ...

  4. codevs1316 文化之旅

    题目描述 Description 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可 ...

  5. iOS中获取各种文件的目录路径的方法

    我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...

  6. Atitit.软件与编程语言中的锁机制原理attilax总结

    Atitit.软件与编程语言中的锁机制原理attilax总结 1. 用途 (Db,业务数据加锁,并发操作加锁.1 2. 锁得类型 排它锁 "互斥锁 共享锁 乐观锁与悲观锁1 2.1. 自旋锁 ...

  7. 属性(@property)、@synthesize

    先前我们学的实例变量是这样的 { int _age; int _height; int age; } 后来学属性 @property int age; 看到@property 会自动编译生成某个成员变 ...

  8. 红外解码编码学习----verilog

    在设计中运用红外遥控器可以很好的解决按键缺少的问题,还可以方便的控制产品. 红外发射部分: 红外发射管: 判断红外发射管的好坏 : 电路原理图: 接收部分: 传输的NEC协议: 本实验电路: veri ...

  9. Windows和Unix下的编码问题

    今天测试shell脚本时,执行报错: ./report.sh: /tmp/tmp.E8ekx6r5Qq/report.sh: /bin/bash^M: bad interpreter: No such ...

  10. [系统设计/开发] APP密钥签发服务器

    公司的信息安全制度要求对产线的APP进行严格的签发管理,确保密钥.密码的安全. 之前的做法是: 建立一台独立的签发主机: 密钥放在签发主机上,由专人管理: 构建系统每构建出一个产线APP,都要手动拷贝 ...