分页+搜索功能的实现
作者:互联网
分页+搜索应该是页面上一直在用的功能了。
他们两个分开是挺好做的,但是和起来就是另一回事了。
首先我们来分析下它们的原理,搜索是搜索的表中的某些字段亦或是模糊搜索,加起来就是一个网页。
分页则是需要网页上传过去一个当前页,传过去一个总页数,后台进行总页数/每页展示条数。
加在一起则是
//条件查询 public List<UserInfo> getProductByCon(int index,int currentCount,Condition con) throws SQLException{ QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource()); String sql="select * from userinfo where 1=1 "; //如果不把where放到这里面,就会出现上一个无值,下一个不走了 ArrayList<Object> arr=new ArrayList<Object>(); //如果pname去掉空格后不为空字符串,并且不为空,去拼串 if(con.getUsercard()!=null&&!con.getUsercard().trim().equals("")){ sql+=" and usercard like ?"; arr.add("%"+con.getUsercard()+"%"); } if(con.getUsername()!=null&&!con.getUsername().trim().equals("")){ sql+=" and username like ?"; arr.add("%"+con.getUsername()+"%"); } if(con.getStart()!=null&&!con.getStart().trim().equals("")){ sql+=" AND ? < starttime "; arr.add(con.getStart()); System.out.println("lala"); } if(con.getEnd()!=null&&!con.getEnd().trim().equals("")){ sql+=" AND ? > starttime"; System.out.println("lal"); arr.add(con.getEnd()); } sql+=" limit ?,?"; arr.add(index); arr.add(currentCount); /* if(!con.getCid().trim().equals("")&&con.getCid().trim()!=null){ sql+=" and cid=?"; arr.add(con.getCid()); }*/ //将存放了形参的arr当做可变参数传入 List<UserInfo> list=qr.query(sql, new BeanListHandler<UserInfo>(UserInfo.class),arr.toArray()); System.out.println(list); return list; }
service
//分页:为了封装一个Pageben给servlet public PageBean<UserInfo> getPageBean(int currentPage,int currentCount,Condition con){ PageBean<UserInfo> page=new PageBean<UserInfo>(); //封装当前页 page.setCurrentPage(currentPage); //封装每页显示的条数 page.setCurrentCount(currentCount); //封装总条数 int totalCount=0; try { totalCount=userInfroDao.gettotalCount(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } page.setTotalCount(totalCount); //封装总页数=总条数/每页显示的条数 52*1.0/12=4 int totalPage=(int)Math.ceil(totalCount*1.0/currentCount); page.setTotalPage(totalPage); //封装每页显示的数据 //封装每页显示的数据select * from product limit起始页,每页显示条数 //计算起始页=(当前页-1)*每页显示条数 int index=(currentPage-1)*currentCount; List<UserInfo> list=null; try { list=userInfroDao.getProductByCon(index, currentCount,con); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } page.setList(list); return page; }
cotroller
//搜索 //解决乱码 request.setCharacterEncoding("UTF-8"); //获取所有参数的map集合 Map<String ,String[]> map=request.getParameterMap(); //new集合 Condition con=new Condition(); //将参数封装集合中,三个搜索的参数传入 try { BeanUtils.populate(con, map); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } //分页 //从前台获取当前页 String currentPageStr=request.getParameter("currentPage"); //因为servlet请求页面,显示默认的数字,所以就要设定下为空=1 if(currentPageStr==null){ currentPageStr="1"; } //将当前页字符串强转为int int currentPage=Integer.parseInt(currentPageStr); System.out.println(currentPage); //手动设置每页显示的条数 int currentCount=12; //调用servlet方法 PageBean<UserInfo> page=userInfoUser.getPageBean(currentPage, currentCount,con); //放入域中 request.setAttribute("Page", page); //请求转发 //调用service层方法 /*List<UserInfo> list =userInfoUser.getProductByCon(con); UserInfo userinfo=new UserInfo(); //和之前遍历商品的是一样的,为了保证是一个值 request.setAttribute("getUserinfo", list);*/ request.getRequestDispatcher("/adduserinfo.jsp").forward(request, response); }
jsp
<form method="post" action="${pageContext.request.contextPath}/PageServlet"> <div class="layui-card-body"> <div class="layui-inline layui-show-xs-block"> <input type="text" name="username" placeholder="请输入姓名" autocomplete="off" class="layui-input" value="${Condition.username}"> </div> <div class="layui-inline layui-show-xs-block"> <input type="text" name="usercard" placeholder="请输入身份证" autocomplete="off" class="layui-input" value="${Condition.usercard}"> </div> <%-- 查找身份证:<input type="text" name="usercard" value="${Condition.usercard}" style="height: 25px; width: 152px; border-width: 1px; border-style: solid; background-color: #fff; border-radius: 2px;"> 查找姓名:<input type="text" name="username" value="${Condition.username}" style="height: 25px; width: 152px; border-width: 1px; border-style: solid; background-color: #fff; border-radius: 2px;"> --%> <!-- 开始时间-结束时间查询--> <div class="layui-inline layui-show-xs-block"> <input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="start" value="${Condition.start}"> </div> <div class="layui-inline layui-show-xs-block"> <input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="end" value="${Condition.end}"> </div> <div class="layui-inline layui-show-xs-block"> <button class="layui-btn" lay-submit="" lay-filter="sreach" type="submit"> <i class="layui-icon"></i> </button> </div> ====分页======== <!--分页 --> <div style="width: 450px; margin: 0 auto; margin-top: 50px;"> <ul class="pagination" style="text-align: center; margin-top: 10px;"> <!--上一页 --> <c:if test="${Page.currentPage==1}"> <li class="disabled"><a href="javascript:void(0)" aria-label="Previous"><span aria-hidden="true">«</span></a></li> </c:if> <c:if test="${ Page.currentPage!=1}"> <li><a href="${pageContext.request.contextPath}/PageServlet?currentPage=${Page.currentPage-1 }" aria-label="Previous"><span aria-hidden="true">«</span></a></li> </c:if> <c:forEach begin="1" end="${Page.totalPage }" var="page"> <c:if test="${ page==Page.currentPage}"> <li class="current"><a href="${pageContext.request.contextPath}/PageServlet?currentPage=${page }">${page }</a> </li> </c:if> <!-- 如果当前页不等于从域中取过来的当前页--> <c:if test="${ page!=Page.currentPage}"> <li><a href="${pageContext.request.contextPath}/PageServlet?currentPage=${page }">${page }</a></li> </c:if> </c:forEach> <c:if test="${Page.currentPage==Page.totalPage}"> <li class="disabled"><a href="javascript:void(0)" aria-label="Previous"><span aria-hidden="true">«</span></a></li> </c:if> <c:if test="${Page.currentPage!=Page.totalPage}"> <li><a href="${pageContext.request.contextPath}/PageServlet?currentPage=${Page.currentPage+1}" aria-label="Next"> <span aria-hidden="true">»</span> </a></li> </c:if> </ul> </div>
标签:currentCount,功能,分页,int,arr,搜索,catch,page,con 来源: https://www.cnblogs.com/a199706/p/11686503.html