@目录

       什么是分页 ?

      两个子模块功能的问题分析 和 解决方案

      有条件查和无条件查询的影响 和 解决方案

     项目案例: mysql + commons-dbutils+itcast-tools+BaseServlet + 分页+JSP+JSTL+EL+MVC模式

 


 

《JavaWeb从入门到改行》分页功能的实现

如上所示,就是分页  ,不用多说了

子模块功能的问题分析 和 解决方案

 《JavaWeb从入门到改行》分页功能的实现

@总功能分析  常规JDBC中,点击查询或输入条件查询,在页面中可显示查询出的所有记录,有多少记录就显示多少。在这种项目的基础上增加分页功能 。 @分页功能的宗旨 是无论什么样的查询,显示出的记录都是当前页的记录 。  所以,我们必须得向系统说明我们当前是要显示第几页的数据 。  自然,需要一个PageBean类

public class PageBean<T> {
        private int pageCode ;//当前页码
//        private int totalPage ;//总页数,总页数应该由计算获取
        private int totalRecord;//总记录数
        private int pageSize;//每页记录数,这是参数是定做这个软件的甲方提出来的,在Servlet中直接定义为10了
        private List<T> beanList;//当前页的记录集合,方便整页记录的转移
        private String url ;//Url后的条件,条件查询设置的

这个PageBean类中封装了当前页、总记录数、当前页所有记录的集合等,系统通过当前页码这个参数返回pageSize条记录放在beanList集合中返回显示。 

@子模块功能1 中首页的pageCode是1,尾页的pageCode是totalPage,上一页和下一页分别是pageCode-1 和pageCode+1 。 

@子模块功能2 先来分析一个功能 : 当前页在页码列表中是第几个位置 ?

《JavaWeb从入门到改行》分页功能的实现《JavaWeb从入门到改行》分页功能的实现

 

从上述两张图片中,点击1页码,当前页处于列表的第1个位置,点击2页码,当前页处于列表的第2个位置,..........,点击6页码,当前页处于列表的第6个位置,但是当点击7页码时,当前页还是处于列表的第6个位置 。 也就是说,假如每次一行只能显示10个页码,1~6页码的当前页的位置还是1~6,列表从页码1~页码10。   但是7~10页码的当前页的位置始终位于页码列表的第6个位置 ,列表从【页码2~页码11】~【页码X~页码totalPage】。其实非常好解决  ,列表头尾的判定 还是利用pageCode , begin = pageCode - 5   ,  end = pageCode + 4  。 

@解决 

  • 如果  totalPage  <=  10(列表长度),那么  begin  =  1,end  =  totalPage ;
  • 使用公式计算;begin  =  pc-5    ,    end  =   pc   +   4;
  •  头溢出:当  begin  <  1  时   ,   让  begin  =  1 ;
  • 尾溢出:当   end  >  totalPage  时   ,   让  end  =  totalPage         

 

有条件查和无条件查询的影响 和 解决方案

 @产生一个问题  分页使得有条件查询产生一个严重问题 , 通过条件查询出40条记录,分4页显示,只有第一页是该条件下的记录,其余3页都是不带条件的记录 。所以我们必须告诉系统我们的条件是什么,每一页都要带着条件去查询和返回  。  

@解决 在pageBean中设置url参数 , 这个参数将会携带这条件传递到Servlet中 。 

项目案例(mvc+jdbc+c3p0+BaseServlet+mysql+JSP+EL+JSTL)

@使用   mysql数据库,c3p0数据库连接池,

             采用commons-dbutils组件,封装好的JdbcUtils工具类和TxQueryRunner工具类辅助JDBC ,  (学习地址 : http://www.cnblogs.com/zyuqiang/p/7218083.html

             BaseServlet辅助类 

            JSP+EL+JSTL

@数据库

1 CREATE TABLE t_customer (
2    username VARCHAR(50) DEFAULT NULL,
3    age INT(11) DEFAULT NULL,
4    balance DOUBLE(20,5) DEFAULT NULL
5 );
t_customer

相关文章: