模糊查询【分页的起点】

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

 

复习:

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

 

posted on 2016-02-08 22:00  木鸟飞  阅读(602)  评论(0编辑  收藏  举报

导航