JSP分页1
分页
1、什么分页?
第N页/共M页 首页 上一页 1 2 3 4 5 6 7 8 9 10 下一页 尾页 口 go
分页的优点:只查询一页,不用查询所有页!
2、分页数据
页面的数据都是由Servlet传递来的!
Servlet:
当前页:PageCode,pc;
pc:如果页面没有传递当前页码,那么Servlet默认是第一页,或者按页面传递的为准!
总页数:totalPage,tp
tp:总记录数/每页记录数
总记录数:totalRecord,tr
tr:dao来获取,select count(*) from t_customer
每页记录数:业务数据或者叫系统数据。10条
当前页数据:beanList
url
3、数据的传递
这些分页数据总要在各层之间来回的传递!
我们把这些分页数据封装到一个javaBean中,它就叫分页Bean,例如:PageBean
4、分页在各层中的处理
页面:给出分页相关的链接们!
页面需要给servlet传递什么?当前页码
servlet:创建PageBean对象,给pageBean的所有的属性赋值然后传递给页面
Servlet需要给dao传递pc,ps
service:略
dao:
tr:select count(*) from t_customer
beanList: select * from t_customer limit x,y
mysql 分页语句:
sql="SELECT * FROM t_customer ORDER BY cname LIMIT ?,?";
oracle分页语句:
sql="select * from (select rownum r,t.* from (select * from profile order by id) t) tb where r>? and r<=?";
oracle中要注意rownum是一个伪列,最好使用别名,有些地方比如>=或者in直接使用rownum就是无效的。
例子:
oracle做的:
package com.domain; import java.util.List; public class PageBean <T>{ private int pc;//page code 当前页码 private int tp;//total page 总页数 private int tr;//totalRecoed 总记录数 private int ps;//page size 每页的记录数 private List<T> beanList;//当前页转载的bean集合 public PageBean() { super(); } public PageBean(int pc, int tp, int tr, int ps, List<T> beanList) { super(); this.pc = pc; this.tp = tp; this.tr = tr; this.ps = ps; this.beanList = beanList; } @Override public String toString() { return "PageBean [pc=" + pc + ", tp=" + tp + ", tr=" + tr + ", ps=" + ps + ", beanList=" + beanList + "]"; } public int getPc() { return pc; } public void setPc(int pc) { this.pc = pc; } public int getTp() { tp=tr/ps; return tr%ps==0?tp:tp+1; } public void setTp(int tp) { this.tp = tp; } public int getTr() { return tr; } public void setTr(int tr) { this.tr = tr; } public int getPs() { return ps; } public void setPs(int ps) { this.ps = ps; } public List<T> getBeanList() { return beanList; } public void setBeanList(List<T> beanList) { this.beanList = beanList; } } dao中的findAll: public PageBean<Profile> findAll(int pc,int ps){ PageBean<Profile> pb=new PageBean<Profile>(); pb.setPc(pc); pb.setPs(ps); QueryRunner qr=new QueryRunner(); Connection con; try { con = JdbcUtils.getConnection(); String sql="SELECT COUNT(*) FROM profile"; Number tr1=(Number) qr.query(con,sql, new ScalarHandler()); int tr=tr1.intValue(); pb.setTr(tr); int tp=tr%ps==0?tr/ps:tr/ps+1; pb.setTp(tp); //System.out.println(tp+" "+pc+" "+ps+" "+ps*(pc-1)+" "+ps*pc); //sql="SELECT * FROM profile order by id where rownum>? and rownum<=?"; sql="select * from (select rownum r,t.* from (select * from profile order by id) t) tb where r>? and r<=?"; Object[] params={ps*(pc-1),ps*pc}; ResultSetHandler<List<Profile>> rsh=new BeanListHandler<Profile>(Profile.class); List<Profile> beanList=(ArrayList<Profile>) qr.query(con, sql, rsh,params); pb.setBeanList(beanList); JdbcUtils.releaseConnection(con); } catch (SQLException e) { throw new RuntimeException(e); } return pb; } service中的findAll: public PageBean<Profile> findAll(int pc,int ps){ return profileDao.findAll(pc,ps); } 直接使用的jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page import="com.domain.Profile,java.sql.Date,com.service.ProfileService,java.text.SimpleDateFormat,com.domain.PageBean" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'list.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style type="text/css"> td{ /* width:80px; */ border:1px solid; } table{ border:1px solid; } #tr1{ background-color: yellow; } </style> <script type="text/javascript" src="js/jquery1.8.3.js"></script> <script type="text/javascript" src="js/list.js"></script> </head> <% ProfileService profileService=new ProfileService(); String pco=request.getParameter("pc"); int pc; if(pco==null) pc=1; else pc=Integer.parseInt(request.getParameter("pc")); int ps=10; PageBean<Profile> pb=profileService.findAll(pc,ps); request.setAttribute("pb",pb); //System.out.println(pb); List<Profile> profiles=pb.getBeanList(); %> <%! String date2Str(Date d){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(d); } %> <body> <table> <tr id="tr1"> <td>编号</td> <td>姓名</td> <td>生日</td> <td>性别</td> <td>职业</td> <td>住所</td> <td>电话</td> <td>操作</td> </tr> <%for(Profile p:profiles){%> <tr> <td><%=p.getId() %></td> <td><%=p.getName() %></td> <td><%=date2Str(p.getBirthday()) %></td> <td><%=p.getGender() %></td> <td><%=p.getCareer() %></td> <td><%=p.getAddress() %></td> <td><%=p.getMobile() %></td> <td> <button name="show" >明细</button> <button name="alert" >修改</button> <button name="delete" >删除</button> </td> </tr> <% } %> </table> <br/> <c:choose> <c:when test="${pb.pc!=1 }"> <a href="<c:url value='/list.jsp?pc=1'/>">首页</a> <a href="<c:url value='/list.jsp?pc=${pb.pc-1 }'/>">上一页</a> </c:when> <c:otherwise> 首页 上一页 </c:otherwise> </c:choose> <c:choose> <c:when test="${pb.pc!=pb.tp }"> <a href="<c:url value='/list.jsp?pc=${pb.pc+1 }'/>">下一页</a> <a href="<c:url value='/list.jsp?pc=${pb.tp }'/>">尾页</a> </c:when> <c:otherwise> 下一页 尾页 </c:otherwise> </c:choose> </body> </html>
mysql做的:
public PageBean findAll(int pc,int ps){ try{ /* * 1、创建PageBean对象pb * 2、设置pb的pc和ps * 3、得到tr,设置给pb * 4、得打beanList,设置给pb * 5、返回pb */ PageBean<Customer> pb=new PageBean<Customer>(); pb.setPc(pc); pb.setPs(ps); /* * 得到tr */ String sql="SELECT COUNT(*) FROM t_customer"; Number num=(Number)qr.query(sql, new ScalarHandler()); int tr=num.intValue(); pb.setTr(tr); /* * 得到beanList */ sql="SELECT * FROM t_customer ORDER BY cname LIMIT ?,?"; Object[] params={(pc-1)*ps,ps}; List<Customer> beanList=qr.query(sql, new BeanListHandler<Customer>(Customer.class),params); pb.setBeanList(beanList); return pb; }catch(SQLException e){ throw new RuntimeException(e); } } package cn.itcast.cus.domain; import java.util.List; public class PageBean<T> { private int pc;//当前页码 Page code private int tp;//总页数 total page private int tr;//总记录数 total record private int ps;//每页记录数pahe size private List<T> beanList;//当前页的记录 public int getPc() { return pc; } public void setPc(int pc) { this.pc = pc; } public int getTp() { //通过总记录数和每页记录数的到总页数 tp= tr/ps; return tr%ps==0?tp:tp+1; } public void setTp(int tp) { this.tp = tp; } public int getTr() { return tr; } public void setTr(int tr) { this.tr = tr; } public int getPs() { return ps; } public void setPs(int ps) { this.ps = ps; } public List<T> getBeanList() { return beanList; } public void setBeanList(List<T> beanList) { this.beanList = beanList; } public PageBean() { super(); } public PageBean(int pc, int tp, int tr, int ps, List<T> beanList) { super(); this.pc = pc; this.tp = tp; this.tr = tr; this.ps = ps; this.beanList = beanList; } } package cn.itcast.cus.service; import java.util.List; import cn.itcast.cus.dao.CustomerDao; import cn.itcast.cus.domain.Customer; import cn.itcast.cus.domain.PageBean; public class CustomerService { private CustomerDao customerDao=new CustomerDao(); public void addCustomer(Customer customer){ customerDao.add(customer); } // public List<Customer> findAll(){ // return customerDao.findAll(); // } public PageBean findAll(int pc,int ps){ return customerDao.findAll(pc,ps); } public Customer load(String cid){ return customerDao.load(cid); } public void update(Customer c){ customerDao.update(c); } public void delete(String cid) { customerDao.delete(cid); } public List<Customer> query(Customer c) { return customerDao.query(c); } } public String findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 1、获取页面传递的pc * 2、给定ps的值 * 3、使用pc和ps调用service方法,得到PageBean保存到request域 * 4、转发到list.jsp */ /* * 1、得到pc * 如果pc参数不存在,pc为1 * 如果pc参数存在,需要转换为int类型即可 */ int pc=getPc(request);//得到pc int ps=10;//给定ps的值 PageBean<Customer> pb=customerService.findAll(pc,ps);//传递pc,ps给Service,得到PageBean request.setAttribute("pb", pb);//保存到request域中 return "f:/list.jsp";//转发到list.jsp } <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>客户列表</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h3 align="center">客户列表</h3> <table border="1" width="70%" align="center"> <tr> <th>客户姓名</th> <th>性别</th> <th>生日</th> <th>手机</th> <th>邮箱</th> <th>描述</th> <th>操作</th> </tr> <!-- 要遍历的是PageBean的beanList这个集合 --> <c:forEach var="c" items="${pb.beanList }"> <tr> <td>${c.cname }</td> <td>${c.gender }</td> <td>${c.birthday }</td> <td>${c.cellphone }</td> <td>${c.email }</td> <td>${c.description }</td> <td> <a href="<c:url value='/CustomerServlet?cid=${c.cid }&method=preEdit'/>">编辑</a> <a href="<c:url value='/CustomerServlet?cid=${c.cid }&method=delete'/>">删除</a> </td> </tr> </c:forEach> </table> <br/> <%-- 给出分页相差的链接 --%> <center> 第${pb.pc }页/共${pb.tp }页 <a href="<c:url value='/CustomerServlet?method=findAll&pc=1'/> ">首页</a> <c:if test="${pb.pc>1 }"> <a href="<c:url value='/CustomerServlet?method=findAll&pc=${pb.pc-1 }'/> ">上一页</a> </c:if> <c:if test="${pb.pc<pb.tp }"> <a href="<c:url value='/CustomerServlet?method=findAll&pc=${pb.pc+1 }'/>">下一页</a> </c:if> <a href="<c:url value='/CustomerServlet?method=findAll&pc=${pb.tp }'/>">尾页</a> </center> </body> </html>
5、显示分页页码列表
1 2 3 4 5 6 7 8 9 10
最多显示多少个页码!定位10;
当前页,在页码列表中的位置,定位6;
只需要当前页来定出来页码列表!
定下来页码列表只需要两样数据:
begin
end
10 11 12 13 14 (15) 16 17 18 19
需要使用pc来退算出begin和end
begin=pc-5
end=pc+4
计算公式:
如果总页数<=10(列表长度,那么begin=1,end=总页数)
使用公式计算:begin=pc-5,end=pc+4;
头溢出:当begin<1时让begin=1
尾溢出:当end>${tp},让end=${tp}
注意:尾溢出应该先于头溢出判断
6、在超链接中要保留参数
当使用多条件查询之后,然后在点击第2页时,这个第二页的超链接没有条件了,所以会丢失条件,所以我们需要在页面上的所有链接都要保留条件!
我们要把条件以一个字符串的形式保存到PageBean的url中!这个任务交给Servlet!
post中的数据无法从url获取 表单会自动将中文参数转成url编码
这两点事如果存在高级查询的时候分页改进的。
例子:
加入字段url,保存之前查询的url,剔除页码
package cn.itcast.cus.domain; import java.util.List; public class PageBean<T> { private int pc;//当前页码 Page code private int tp;//总页数 total page private int tr;//总记录数 total record private int ps;//每页记录数pahe size private List<T> beanList;//当前页的记录 private String url;//这个就是url后的条件! public int getPc() { return pc; } public void setPc(int pc) { this.pc = pc; } public int getTp() { //通过总记录数和每页记录数的到总页数 tp= tr/ps; return tr%ps==0?tp:tp+1; } public void setTp(int tp) { this.tp = tp; } public int getTr() { return tr; } public void setTr(int tr) { this.tr = tr; } public int getPs() { return ps; } public void setPs(int ps) { this.ps = ps; } public List<T> getBeanList() { return beanList; } public void setBeanList(List<T> beanList) { this.beanList = beanList; } public PageBean() { super(); } public PageBean(int pc, int tp, int tr, int ps, List<T> beanList,String url) { super(); this.pc = pc; this.tp = tp; this.tr = tr; this.ps = ps; this.beanList = beanList; this.url=url; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
list.jsp中域页码有关的设置
<br/> <%-- 给出分页相差的链接 --%> <center> 第${pb.pc }页/共${pb.tp }页 <a href="${pb.url }&pc=1">首页</a> <c:if test="${pb.pc>1 }"> <a href="${pb.url }&pc=${pb.pc-1 }">上一页</a> </c:if> <!-- 计算begin和end者两个东西 --> <c:choose> <%-- 如果总页数不足10页,那么把所有的页数都显示出来 --%> <c:when test="${bp.tp<=10 }"> <c:set var="begin" value="1"/> <c:set var="end" value="${pb.tp}"/> </c:when> <%-- 当总页数>10时,通过公式计算begin和end --%> <c:otherwise> <c:set var="begin" value="${pb.pc-5 }"/> <c:set var="end" value="${pb.pc+4 }"/> <%-- 尾溢出 --%> <c:if test="${end>pb.tp }"> <c:set var="begin" value="${pb.tp-9 }"/> <c:set var="end" value="${pb.tp }"/> </c:if> <%-- 注意尾溢出要在头溢出之前 --%> <%-- 头溢出 --%> <c:if test="${begin<1 }"> <c:set var="begin" value="1" /> <c:set var="end" value="10" /> </c:if> </c:otherwise> </c:choose> <%-- 循环遍历页码列表 --%> <c:forEach var="i" begin="${begin }" end="${end }"> <c:choose> <c:when test="${i eq pb.pc }"> [${i }] </c:when> <c:otherwise> <a href="${pb.url }&pc=${i}">[${i }]</a> </c:otherwise> </c:choose> </c:forEach> <c:if test="${pb.pc<pb.tp }"> <a href="${pb.url }&pc=${pb.pc+1 }">下一页</a> </c:if> <a href="${pb.url }&pc=${pb.tp }">尾页</a> </center>
query.jsp中的提交方式一定要改成get,因为post方式无法从url中获取参数 request.getQueryString()
<form action="<c:url value='/CustomerServlet'/>" method="get"> <input type="hidden" name="method" value="query"> <table border="0" align="center" width="40%" style="margin-left: 100px;"> <tr> <td width="100px">客户名称</td> <td width="40%"> <input type="text" name="cname"/> </td> </tr> <tr> <td>客户性别</td> <td> <select name="gender"> <option value="">==请选择性别==</option> <option value="男">男</option> <option value="女">女</option> </select> </td> </tr> <tr> <td>手机</td> <td> <input type="text" name="cellphone"/> </td> <td> <label id="cellphoneError" class="error"> </label> </td> </tr> <tr> <td>邮箱</td> <td> <input type="text" name="email"/> </td> <td> <label id="emailError" class="error"> </label> </td> </tr> <tr> <td> </td> <td> <input type="submit" value="搜索"/> <input type="reset" value="重置"/> </td> <td> </td> </tr> </table> </form>
customerDao中查询方法中关于sql语句的拼接可以参考下
public PageBean findAll(int pc,int ps){ try{ /* * 1、创建PageBean对象pb * 2、设置pb的pc和ps * 3、得到tr,设置给pb * 4、得打beanList,设置给pb * 5、返回pb */ PageBean<Customer> pb=new PageBean<Customer>(); pb.setPc(pc); pb.setPs(ps); /* * 得到tr */ String sql="SELECT COUNT(*) FROM t_customer"; Number num=(Number)qr.query(sql, new ScalarHandler()); int tr=num.intValue(); pb.setTr(tr); /* * 得到beanList */ sql="SELECT * FROM t_customer ORDER BY cname LIMIT ?,?"; Object[] params={(pc-1)*ps,ps}; List<Customer> beanList=qr.query(sql, new BeanListHandler<Customer>(Customer.class),params); pb.setBeanList(beanList); return pb; }catch(SQLException e){ throw new RuntimeException(e); } } public PageBean<Customer> query(Customer c,int pc,int ps) { try { /* * 1、创建PageBean对象 * 2、设置已有属性,pc和ps * 3、得到tr * 4、得到beanList */ PageBean pb=new PageBean(); pb.setPc(pc); pb.setPs(ps); /* * 得到tr */ StringBuilder cntSql=new StringBuilder("SELECT COUNT(*) FROM t_customer"); StringBuilder whereSql=new StringBuilder(" WHERE 1=1"); ArrayList<Object> params=new ArrayList<Object>(); String cname=c.getCname(); if(cname!=null&& !cname.trim().isEmpty()){ whereSql.append(" and cname like ?"); params.add("%"+cname+"%"); } String gender=c.getGender(); if(gender!=null&&!gender.trim().isEmpty()){ whereSql.append(" and gender=?"); params.add(gender); } String cellphone=c.getCellphone(); if(cellphone!=null &&!cellphone.trim().isEmpty()){ whereSql.append(" and cellphone like ?"); params.add("%"+cellphone+"%"); } String email=c.getEmail(); if(email!=null && !email.trim().isEmpty()){ whereSql .append(" and email like ?"); params.add("%"+email+"%"); } /* * select count(*)...+where ... * 执行之 */ Number num=(Number)qr.query(cntSql.append(whereSql).toString(), new ScalarHandler(),params.toArray()); // System.out.println(1+" :"+cntSql.append(whereSql).toString()); int tr=num.intValue(); pb.setTr(tr); /* * 得到beanList */ StringBuilder sql=new StringBuilder("SELECT * FROM t_customer"); //我们查询beanList这一步还需要给出limit字据 StringBuilder limitSql=new StringBuilder(" limit ?,?"); //params中需要给limit后两个问号对应的值 params.add((pc-1)*ps); params.add(ps); //执行之 List<Customer> beanList=(List<Customer>) qr.query(sql.append(whereSql).append(limitSql).toString(),new BeanListHandler<Customer>(Customer.class),params.toArray()); // System.out.println(2+" : "+sql.append(whereSql).append(limitSql).toString()); pb.setBeanList(beanList); // System.out.println(pb.getPc()+" "+pb.getTp()); return pb; } catch (SQLException e) { throw new RuntimeException(e); } }
package cn.itcast.cus.service; import java.util.List; import cn.itcast.cus.dao.CustomerDao; import cn.itcast.cus.domain.Customer; import cn.itcast.cus.domain.PageBean; public class CustomerService { private CustomerDao customerDao=new CustomerDao(); public void addCustomer(Customer customer){ customerDao.add(customer); } // public List<Customer> findAll(){ // return customerDao.findAll(); // } public PageBean findAll(int pc,int ps){ return customerDao.findAll(pc,ps); } public Customer load(String cid){ return customerDao.load(cid); } public void update(Customer c){ customerDao.update(c); } public void delete(String cid) { customerDao.delete(cid); } // public List<Customer> query(Customer c) { // return customerDao.query(c); // } public PageBean<Customer> query(Customer c,int pc,int ps) { return customerDao.query(c,pc,ps); } }
customerServlet:这个比较重要
package cn.itcast.cus.web.servlet; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.itcast.cus.domain.Customer; import cn.itcast.cus.domain.PageBean; import cn.itcast.cus.service.CustomerService; import cn.itcast.servlet.BaseServlet; import cn.itcast.utils.CommonUtils; public class CustomerServlet extends BaseServlet { private static final long serialVersionUID = 1L; CustomerService customerService=new CustomerService(); public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1、补全表单数据到Customer对象 * 2、补全Cid,使用uuid * 3、使用service方法完成添加工作 * 4.向request域中保存成功信息 * 5、转发到msg.jsp */ Customer c=CommonUtils.toBean(request.getParameterMap(), Customer.class); c.setCid(CommonUtils.uuid()); customerService.addCustomer(c); request.setAttribute("msg", "恭喜!注册成功"); return "f:/msg.jsp"; } // public String findAll(HttpServletRequest request, HttpServletResponse response) // throws ServletException, IOException { // /* // * 1、直接调用service方法,得到查询结果 // * 2、查询结果保存到request域中 // * 3、转发到list.jsp // */ // List<Customer> customers= customerService.findAll(); // request.setAttribute("customers", customers); // return "f:/list.jsp"; // } public String findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 1、获取页面传递的pc * 2、给定ps的值 * 3、使用pc和ps调用service方法,得到PageBean保存到request域 * 4、转发到list.jsp */ /* * 1、得到pc * 如果pc参数不存在,pc为1 * 如果pc参数存在,需要转换为int类型即可 */ int pc=getPc(request);//得到pc int ps=10;//给定ps的值 PageBean<Customer> pb=customerService.findAll(pc,ps);//传递pc,ps给Service,得到PageBean pb.setUrl(getUrl(request)); request.setAttribute("pb", pb);//保存到request域中 return "f:/list.jsp";//转发到list.jsp } /** * 得到pc的方法 * @param request * @return */ private int getPc(HttpServletRequest request){ String pc=request.getParameter("pc"); if(pc==null) return 1; return Integer.parseInt(pc); } public String preEdit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1、直接调用service方法,得到查询结果 * 2、查询结果保存到request域中 * 3、转发到EDIT.jsp */ String cid=request.getParameter("cid"); Customer c=customerService.load(cid); request.setAttribute("customer", c); return "f:/edit.jsp"; } public String edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1、封装表单数据到Customer对象中 * 2、调用service完成编辑 * 3、保存成功信息到request域 * 4、转发到msg.jsp显示成功信息 */ Customer c=CommonUtils.toBean(request.getParameterMap(), Customer.class); customerService.update(c); request.setAttribute("msg", "恭喜,修改成功!"); return "f:/msg.jsp"; } public String delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1、封装表单数据到Customer对象中 * 2、调用service完成编辑 * 3、保存成功信息到request域 * 4、转发到msg.jsp显示成功信息 */ String cid=request.getParameter("cid"); customerService.delete(cid); request.setAttribute("msg", "恭喜,删除成功!"); return "f:/msg.jsp"; } // public String query(HttpServletRequest request, HttpServletResponse response) // throws ServletException, IOException { // /* // * 1、封装表单数据到Customer对象中 // * 2、调用service完成编辑 // * 3、保存查询到request域 // * 4、转发到list.jsp // */ // Customer criteria=CommonUtils.toBean(request.getParameterMap(), Customer.class); // List<Customer> customers=customerService.query(criteria); // request.setAttribute("customers", customers); // return "f:/list.jsp"; // } public String query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //System.out.println(getUrl(request)); /* * 0、把条件封装到customer对象中 * 1、得到pc * 2、给定ps * 3、使用pc和ps以及条件对象得到pageBean * 4、把pageBean保存到request域中 * 5、转发到list.jsp * */ //获取查询条件 Customer criteria=CommonUtils.toBean(request.getParameterMap(), Customer.class); //处理get请求编码问题 int pc=getPc(request);//得到pc int ps=10;//给定ps,10行记录 PageBean<Customer> pb=customerService.query(criteria,pc,ps); //得到url,保存到pb中 pb.setUrl(getUrl(request)); request.setAttribute("pb",pb); return "f:/list.jsp"; } public String getUrl(HttpServletRequest request){ String contextPath=request.getContextPath();//获取项目名 String servletPath=request.getServletPath();//获取servletPath,即/CustomerServlet String queryString=request.getQueryString();//获取问号之后的参数部分 if(queryString.contains("&pc=")){//判断参数部分中是否包含pc这个参数,如果包含就截取 int index=queryString.lastIndexOf("&pc="); queryString=queryString.substring(0,index); } return contextPath+servletPath+"?"+queryString; } public Customer encoding(Customer criteria) throws UnsupportedEncodingException{ String cname=criteria.getCname(); String gender=criteria.getGender(); String cellphone=criteria.getCellphone(); String email=criteria.getEmail(); if(cname!=null && !cname.trim().isEmpty()){ cname=new String(cname.getBytes("iso-8859-1"),"utf-8"); criteria.setCname(cname); } if(gender!=null && !gender.trim().isEmpty()){ gender=new String(gender.getBytes("iso-8859-1"),"utf-8"); criteria.setGender(gender); } if(cellphone!=null && !cellphone.trim().isEmpty()){ cellphone=new String(cellphone.getBytes("iso-8859-1"),"utf-8"); criteria.setCellphone(cellphone); } if(email!=null && !email.trim().isEmpty()){ email=new String(email.getBytes("iso-8859-1"),"utf-8"); criteria.setEmail(email); } return criteria; } }