JSP交互---分页查询(条件分页查询)
2017-10-18 11:01
369 查看
如上图所示:
1). 用户名为空串时,点击查询—–>查询所有用户
2). 用户名输入 ” 史 ” 点击查询—–>查询的是名字中带 ” 史 ” 的用户并且点击下一页或上一页依旧查询的是名字中带 ” 史 ” 的用户.
3). 用户查询不存在的用户不会出现异常,
处理后的页面结构
<form method="post" action="UserListServlet"> 用户名:<input name="name" class="input-text" type="text" value="${requestScope.name}"> <input value="查 询" type="submit"> </form> <table class="list"> <tbody> <tr> <td width="70" height="29"><div class="STYLE1" align="center">编号</div> </td> <td width="80"><div class="STYLE1" align="center">用户名</div> </td> <td width="80"><div class="STYLE1" align="center">用户账号</div> </td> <td width="100"><div class="STYLE1" align="center">性别</div> </td> <td width="100"><div class="STYLE1" align="center">年龄</div> </td> <td width="150"><div class="STYLE1" align="center">电话</div> </td> <td width="150"><div class="STYLE1" align="center">权限</div> </td> </tr> <c:forEach var="user" items="${requestScope.pb.list }" varStatus="row"> <tr> <td height="23"><span class="STYLE1">${user.id }</span></td> <td> <span class="STYLE1"> <a href="UserViewServlet?userId=${user.id}"> ${user.name } </a> </span> </td> <td><span class="STYLE1"> ${user.loginName } </span></td> <td><span class="STYLE1"> ${user.gender==1?"男":"女" }</span></td> <td><span class="STYLE1"> 2</span></td> <td><span class="STYLE1">${user.phone }</span></td>< da73 /span> <td><span class="STYLE1"> ${user.type==1?"管理员":"普通员工"} </span> </td> </tr> </c:forEach> </tbody> </table> <a href="UserListServlet?pageNo=1&name=${requestScope.name}">首页</a> <a href="UserListServlet?pageNo=${requestScope.pb.previous}&name=${requestScope.name}">上一页</a> <a href="UserListServlet?pageNo=${requestScope.pb.next}&name=${requestScope.name}">下一页</a> <a href="UserListServlet?pageNo=${requestScope.pb.totalPage}&name=${requestScope.name} ">末页</a> 当前第${requestScope.pb.pageNo }页 , 总页数:${requestScope.pb.totalPage} , 总条数:${requestScope.pb.count}
一、 新建PageBean 工具类 ( 分页工具类 )
* 参考 http://blog.csdn.net/qq_39316096/article/details/78260816 内第一步*这里重新 写下PageBean的 setCount( )方法
/** * 设置总条数 (根据总条数 对 PageBean 进行其他数据设置) * @param count */ public void setCount(Integer count) { this.count = count; //设置总页数 //如果count(查询结果的总条数)为0 的时候 设置总页数totalPage为1 pageNo的值也为1 //不进行判断的话容易造成 count=0时-->totalPage=0-->pageNo=0--->start=-2(造成SQL语句异常) if(count==0){ totalPage=1; }else{ totalPage=count%pageSize==0?count/pageSize:count/pageSize+1; } //验证页号 if (pageNo<0) { pageNo=1; }else if(pageNo>totalPage){ pageNo=totalPage; } //确认当前页上页的页号 if(pageNo>1){ previous=pageNo-1; }else{ previous=1; } //确认当前页下页的页号 if (pageNo<totalPage) { next=pageNo+1; } else { next=pageNo; } //计算当前页内容 在Mysql 的分页查询起始行 start = (pageNo - 1) * pageSize;
2、在UserMysqlImpl—–>用户表的数据持久化层 中添加方法
添加2个方法 : 根据条件查询多少条用户 和 根据条件 进行分页查询/** 根据姓名 模糊查询 总共有多少条用户 */ public int getUserCount(String name) { //设置变量 储存多少条用户 int count =0; //生成SQL 语句 String sql = "select count(*) from smbms_user "; //创建集合 储存查询参数 List params = new ArrayList(); //判定传入的参数 在不为空和不是空串时 进行SQL语句拼接-----添加参数到集合 if(name!=null&&!name.equals("")){ sql+="where name like ?"; params.add("%"+name+"%"); } // 生成 Object 填充数据--------把集合中的数据转成数据形式 Object[] obj = params.toArray(); //调用BaseDao(数据库工具类)的通用查询方法----传入参数 rs = executeQuery(sql, obj); try { //如果结果有内容(条数)进行 取值 复制 if (rs.next()) { count=rs.getInt(1); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 关闭连接 closeAll(rs, ps, con); return count; } /** * 分页查询 * 根据 姓名 模糊查询所有 用户 * String name 是查询条件(可以多个) * int start 是查询的起始行(pageNo-1)*pageSize * int pageSize 是一页需要显示的条数 * @return 返回一个当前页需显示的 数据集合 */ public List<User> getAll(String name,int start,int pageSize) { //新建集合 储存需返回的数据 List<User> list = new ArrayList<User>(); // 生成SQL语句 String sql = "select * from smbms_user "; //创建集合 储存查询参数 List params = new ArrayList(); //对条件 进行判定----拼接sql语句 储存查询参数 (多个条件进行多次判断) if(name!=null&&!name.equals("")){ sql+="where name like ?"; params.add("%"+name+"%"); } //拼接 分页查询的sql 语句---储存查询参数 start pageSize sql+="limit ?,?"; params.add(start); params.add(pageSize); //把集合储存的查询参数 转换成数组 Object[] obj=params.toArray(); // 调用 通用的查询方法 // 接受 查询结果 rs = executeQuery(sql, obj); try { while (rs.next()) { //如果有下一行 取出数据 ---创建实体类 User user = new User(rs.getInt("user_id"), rs.getString("name"), rs.getString("loginname"), rs.getString("loginpwd"), rs.getInt("gender"),rs.getDate("birthDate"), rs.getString("phone"), rs.getString("address"), rs.getInt("user_type")); //把 实体类(对象) 添加到集合 list.add(user); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 关闭连接 closeAll(rs, ps, con); return list; }
3、在UserServiceImpl—–>用户表的业务逻辑类 中添加分页查询方法
/** * 根据姓名 name 分页查询 * 获取当前页用户 * @return */ public PageBean getUserByNameLimit(String name,int pageNo) { //新建 分页类的 实例 PageBean pb = new PageBean(); //写入当前页号(先写入页号) pb.setPageNo(pageNo); //调用数据持久化层的----->(根据姓名 模糊查询 总共有多少条用户)方法 //写入PageBean(分页工具类) 的count(总条数)属性 pb.setCount(umi.getUserCount(name)); //调用数据持久化层的----->(根据 姓名 模糊查询 当前页的所有 用户)方法 // (是一个list集合) 写入PageBean(分页工具类) 的list(当前页展示数据集合)属性 pb.setList(umi.getAll(name,pb.getStart(), pb.getPageSize())); return pb; }
4、新建查询 用户的 servlet—–>UserListServlet
只重写 doPost( ) 方法—–省略 字符集过滤器 和 session 过滤器public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取页号 //默认 初始值为1 int pageNo = 1; //从页面获取页号 数据 if (request.getParameter("pageNo") != null) { pageNo = Integer.parseInt(request.getParameter("pageNo")); } //从页面获取 name 数据(要查询的姓名) String name = request.getParameter("name"); //创建User业务类的实例 UserServiceImpl usi = new UserServiceImpl(); //当前页数据---->调用User业务类的 (根据 姓名 当前页页号 获取当前页的用户)方法 PageBean pb = usi.getUserByNameLimit(name,pageNo); //把分页工具类 pb 传到页面 request.setAttribute("pb", pb); //把查询的 名字(查询条件) 返回页面 request.setAttribute("name", name); request.getRequestDispatcher("/jsp/userList.jsp").forward(request, response); }
相关文章推荐
- JSP交互---Ajax异步分页查询(条件分页查询)
- JSP通用分页组件,带查询条件
- JSP交互---分页查询(基本分页查询)
- 多条件查询分页页面JSP
- jsp的分页查询的代码(mysql数据库)
- HBase多条件及分页查询的一些方法
- THINKPHP分页时保持查询条件
- 求助hibernate单表分页查询jsp和servlet的传值代码 实在写不出来了
- 毕业设计(十三)---后台用户管理(3)之- 带查询条件 分页查找方法
- 91---Criteria的内链接,分页,查询唯一对象,条件查询,分组统计,投影查询,DetachedCriteria
- jsp分页查询及显示
- 多条件查询数据列表并进行分页
- easyUI 条件查询 跟分页数据展示写在了一起的
- 高效的jsp分页查询
- 分页存储过程,可将查询条件作为参数传递的分页查询存储过程
- SSH实现带条件查询分页功能
- Lucene代码备份之分页条件查询
- WebFrom 小程序【条件查询与分页整合】
- dhtmlxGrid分页查询,条件查询实例