您的位置:首页 > 其它

模糊查询【分页的起点】

2016-02-08 22:00 351 查看
条件查询+分页查询的组合。

复习:

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页面中都可以干啥。比如之前说过的flush,isELignore, 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 }">
首页    上一页
</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 }">
下一页     尾页
</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里面,然后 找到 合适的机会清楚,对于 框架来讲,这些条件一直都被保存着,在合适的时机清楚很重要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: