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里面,然后 找到 合适的机会清楚,对于 框架来讲,这些条件一直都被保存着,在合适的时机清楚很重要。

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/letben/p/5185286.html
Copyright © 2011-2022 走看看