JavaWeb笔记-20-客户管理案例之分页进阶、分页组合

1、分页:


原理:利用sql语句中的方言:limit x , y   从x行开始查,查y行   

优点:每次只查询部分,不用查询所有

2、数据的传递:


分页数据们需要在各层之间来回的传递!

为了提升效率,将所有分页数据装进JavaBean中,起名为分页bean。
构成一个JavaBean对象,数据传递时传输该对象即可。
    PageBean: 
    public class PageBean<T> {
        private int pc; // 当前页码
        private int tp; // 总页数  //不允许设置,需要通过计算获得  在get方法中计算.
        private int tr; // 总记录数
        private int ps; // 每页记录数
        private List<T> beanList; // 当前页的记录

        private String url; //用来表示url后的参数条件
    }

3、页面数据:


页面数据都是由Servlet传递过来的。

Servlet需要的数据:
    当前面:pageCode,pc;
        pc:1)如果页面没有传递当前页码,那么Servlet默认是第一页,
            2)按页面传递的页码为准!
    总页数:totalPages,tp
        tp:总记录数(tr)/每页记录数(ps)

        总记录数:totalRecored,tr
            tr:dao来获取,select count(*) from t_customer;
        每页记录数:业务数据或叫系统数据!10行! (ps)

    当前页数据:beanList

    url  //用来代表超链接后参数条件

4、分页在各层中的处理


页面:给出分页相关的所有链接
Servlet:创建PageBean对象,给PageBean所有属性赋值,传递给页面。
    servlet需要给DAO传递 pc 、ps

service:略
Dao: 
    tr: select count(*)...
    beanList:select * from t_customer limit x.y; (从x行开查询,查y行)

这里写图片描述

5、显示页码列表


1)需要计算出页码列表的起始位begin和终止位end,
2)动态显示出从begin到end范围内的页码数字
3)对页码加上超链接

 1 2 3 4 5 (6) 7 8 9 10    括号内为当前页

需要设置:
1)最多显示多少个页码! 现定为10;
2)当前页,在页码列表中的位置,定为6;


页码列表计算:
    思路:使用当前页码来推算出前后页

需要两样数据:
    begin
    end

    10 11 12 13 14 (15) 16 17 18 19
    需要使用pc来推算出begin和end
    begin = pc – 5
    end = pc + 4

计算公式:
    1)总页数 <= 10(列表长度),那么begin=1,end=总页数

2)总页数 > 10 
使用公式计算;begin=pc-5, end=pc + 4;
头溢出:当begin<1时,让begin=1
尾溢出:当end>${tp}时,让end=${tp}

6、分页之查询条件丢失问题


问题介绍:当使用多条件查询后,再点击第 2 页时,第 2 页超链接条件会发生丢失。

为了正常使用,在超链接中要保留参数

解决:1)把条件以字符串的形式保存到PageBean的url中。
      2)在servlet中截取字符串。


问题:post请求不能传递参数,导致参数不能直接获取
解决:将post改为get

    问题:改为get后需要手动处理get请求编码问题。post方式在BaseServlet中已被自动处理过。
    解决:手动挨个设置get方法携带的参数。

url中截去pc的目的: pc是个变量,不能被固定。

servlet

1)//分页查询所有客户
    public String findAll(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*
         * 1.获取页面传递的pc
         *      pc不存在,默认为首页  pc=1
         *      存在,将字符串参数转为int型
         * 2.给定ps的值  
         * 3.使用pc和ps调用service方法,得到PageBean,保存到request中
         * 4.转发到list.jsp中.
         */

        //1.得到pc  使用下面方法.
        int pc = getPc(request);

        //2.给定ps的值
        int ps = 10;  //每页十条记录

        //3.使用pc和ps调用service方法,得到PageBean,
        PageBean<Customer> pb = customerService.findAll(pc,ps);

        //设置URL
        pb.setUrl(getUrl(request));

        //保存到request中
        request.setAttribute("pb", pb);

        return "f:/list.jsp";   
    }

    //得到pc方法
    private int getPc(HttpServletRequest request){
        String value = request.getParameter("pc");
        if(value == null || value.trim().isEmpty()){
            return 1;
        }
        return Integer.parseInt(value);
    }
2)//分页组合查询
        public String query(HttpServletRequest request, HttpServletResponse response)
                throws Se
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值