zoukankan      html  css  js  c++  java
  • 模糊查询【分页的起点】

    条件查询+分页查询的组合。

     

    复习:

    jsp: java server page:java服务器页面

    必须在服务器端执行的页面。

    jsp:执行过程,servlet类。

    1、在servlet服务器中先转义,变成.java文件(是一个servlet类)

    2、编译 变成.class文件

    3、service();它的存在主要是把程序员从繁琐的out.println();out.write()中解脱出来,把jsp中的内容直接进行输出,

     

    因此jsp要比servlet强大。

     

    jsp:组成部分:

    1、静态 主要是指html css 部分。

    2、动态 主要指: 指令 脚本 注释 动作元素,EL 和 JSTL(需要导入jar

    page:使用大量的属性,来说明这个jsp页面中都可以干啥。比如之前说过的flushisELignore, errorpage 等等。还有导入啊 语言啊~这些部分。

    include:静态包含,生成一个.jsp文件

    taglib:引入jstl标签库的形式,(处理程序,tld(描述符文件)),jsp页面引入某一个库

     

    <%!     %>  <%     %>  <%=     %>

     

    <%--     --%>     <!--      -->

     

    jsp 内置对象(隐式对象):request response out session application  pageContext page config exception

     

    jsp 四大作用域: page request  response application pageContext服务器上下文环境可以取得四个域)

    el:可以取值,自动类型转换, 输出语句,赋值标签的属性,计算

    可以取值,取作用域中任何类型的值,javabean变量名,get方法。

    参数:param

    Empty

    jstl: c

    set remove out

    if choose

    foreach

     

    1、增 删 改 查 (全部查询和分页查询)

    2、登录成功以后展现所有的图书,分页展现,还可以借书还书

    3、查看所有读者所借过的书

    4、条件查询

     

    部分实现分页的工具类:

    对四个属性进行封装:

    package com.letben.util.bean;
    
    public class PageBean {
        int pageSize = 2;
        int count = 0;
        int totalPage = 0;
        int currentPage = 1;
        public int getPageSize() {
            return pageSize;
        }
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
        public int getCount() {
            return count;
        }
        public void setCount(int count) {
            this.count = count;
        }
        public int getTotalPage() {
            return count%pageSize == 0?count/pageSize:count/pageSize+1;
        }
        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }
        public int getCurrentPage() {
            return currentPage;
        }
        public void setCurrentPage(String page) {
            if(page!=null){
                this.currentPage = Integer.parseInt(page);
            }
        }
        public PageBean(int pageSize, int count, int totalPage, int currentPage) {
            super();
            this.pageSize = pageSize;
            this.count = count;
            this.totalPage = totalPage;
            this.currentPage = currentPage;
        }
        public PageBean() {
            super();
        }
        @Override
        public String toString() {
            return "PageBean [pageSize=" + pageSize + ", count=" + count
                    + ", totalPage=" + totalPage + ", currentPage=" + currentPage
                    + "]";
        }
    }

    页面使用代码:

    <p>
        <c:if test="${pageBean.currentPage ==1 }">
            首页 &nbsp;&nbsp; 上一页
        </c:if>
        <c:if test="${pageBean.currentPage>1 }">
            <a href="BookServlet.do?page=1">首页</a>
            <a href="BookServlet.do?page=${pageBean.currentPage - 1}">上一页</a>
        </c:if>
        <c:if test="${pageBean.currentPage==pageBean.totalPage }">
            下一页  &nbsp;&nbsp; 尾页
        </c:if>
        <c:if test="${pageBean.currentPage<pageBean.totalPage }">
            <a href="BookServlet.do?page=${pageBean.currentPage + 1}">下一页</a>
            <a href="BookServlet.do?page=${pageBean.totalPage  }">尾页</a>
        </c:if>
    </p>



    分页的使用

    /**
    * 利用另外一种方式,实现记录分组。从导航栏和查询毕竟要判断两次,如果是从首上下尾页进入,那么就记录此状态,否则不记录。 * @param request * @param response * @throws ServletException * @throws IOException */ private void conditionResearch(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ String flag = request.getParameter("historical"); Person p=null; if(flag==null){//说明是从非分页位置进来的。 //不应该记录p。所以: request.getSession().removeAttribute("p"); //移除后,应该开始记录p属性 String name = request.getParameter("name"); String phone = request.getParameter("phone"); String idcard = request.getParameter("idcard"); p = new Person(); p.setName(name); p.setPhone(phone); p.setIdcard(idcard); request.getSession().setAttribute("p", p); }else{//从分页位置进来的 Object obj = request.getSession().getAttribute("p"); if(obj!=null){ p = (Person) obj; }else{ //未得到分页 预存属性 System.out.println("未得到分页 预存属性"); } } PageBean pageBean = new PageBean(); pageBean.setPageSize(2); pageBean.setCount(readerService.researchCountByCondition(p)); pageBean.setCurrentPage(request.getParameter("page")); List<NormalReader> readers = readerService.reserachByCondition(p, pageBean); if(readers!=null){ request.setAttribute("pageBean", pageBean); request.setAttribute("readers", readers); request.getRequestDispatcher("readers.jsp").forward(request, response); }else{ //未查询到分组用户 System.out.println("未查询到分组用户"); } }

    下面为老师原版判定方式:【麻烦】

    private void conditionResearch(HttpServletRequest request,HttpServletResponse response)
                    throws ServletException,IOException{
            String flag = request.getParameter("flag");
            Person p=null;
            if(flag!=null){//导航进来
                request.getSession().removeAttribute("p");
            }else{//不是从导航进来的
                String flag2 = request.getParameter("flag2");
                if(flag2!=null){//是从查询语句进来的。移除p属性
                    request.getSession().removeAttribute("p");
                }
                Object obj = request.getSession().getAttribute("p");
                if(obj==null){//如果没有取到的话,就创建
                    p= new Person();
                    String name = request.getParameter("name");
                    String phone = request.getParameter("phone");
                    String idcard = request.getParameter("idcard");
                    p.setName(name);
                    p.setPhone(phone);
                    p.setIdcard(idcard);
                    request.getSession().setAttribute("p", p);
                }else {//取到的话,强制类型转换:
                    p = (Person) obj;
                }
            }
            
            PageBean pageBean  = new PageBean();
            pageBean.setPageSize(2);
            pageBean.setCount(readerService.researchCountByCondition(p));
            pageBean.setCurrentPage(request.getParameter("page"));
                
            List<NormalReader> readers = readerService.reserachByCondition(p, pageBean);
            if(readers!=null){
                request.setAttribute("pageBean", pageBean);
                request.setAttribute("readers", readers);
                request.getRequestDispatcher("readers.jsp").forward(request, response);
            }else{
                //未查询到分组用户
                System.out.println("未查询到分组用户");
            }
        }

    跟老师当时的情况,多少也有关系,因为,当时检测的时候老师先写好了内层判断,这个时候一个不小心,从导航栏点了一下,这样的话,就要加一个在导航栏的判断,显得逻辑上,就很囧,可能未来进入的方式还有各种,但是如果是从上下页进来的,那么我们就牢牢记住这些个点,就很好。所以在我的方式没有出现bug之前,先按照我的方式记忆。

     

    然后,这里面在 使用框架跟不适用框架的区别在于,自己写的东西,需要在每一次查询都要带着这个分页的条件,放在 session里面,然后 找到 合适的机会清楚,对于 框架来讲,这些条件一直都被保存着,在合适的时机清楚很重要。

  • 相关阅读:
    http工作流程
    HTTP的响应码?
    原型链
    ubuntu查看IO
    ubuntu14.04 64位 安装H3C iNode客户端
    关于ubuntu14.04LTS 64位 播放优酷视频
    python 的字符串驻留机制
    【转】使用virtualenv在ubuntu上搭建python 3开发环境
    ubuntu14.04 python2.7 安装配置OpenCV3.0
    记录两个折磨了我三天的低级错误
  • 原文地址:https://www.cnblogs.com/letben/p/5185286.html
Copyright © 2011-2022 走看看