• 分页+搜索功能的实现


    分页+搜索应该是页面上一直在用的功能了。

    他们两个分开是挺好做的,但是和起来就是另一回事了。

    首先我们来分析下它们的原理,搜索是搜索的表中的某些字段亦或是模糊搜索,加起来就是一个网页。

    分页则是需要网页上传过去一个当前页,传过去一个总页数,后台进行总页数/每页展示条数。

    加在一起则是

    //条件查询
        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;  152px; border- 1px; border-style: solid; background-color: #fff; border-radius: 2px;">
                        查找姓名:<input type="text" name="username"
                            value="${Condition.username}"
                            style="height: 25px;  152px; border- 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">&#xe615;</i>
                            </button>
                        </div>
    ====分页========
        <!--分页 -->
            <div style=" 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">&laquo;</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">&laquo;</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">&laquo;</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">&raquo;</span>
                        </a></li>
                    </c:if>
                </ul>
            </div>

  • 相关阅读:
    如何分秒必争--浅淡时间切片器
    2019微软Power BI 每月功能更新系列——Power BI 6月版本功能完整解读
    2019微软Power BI 每月功能更新系列——Power BI 5月版本功能完整解读
    自制操作系统 ---- 资料
    [书籍推荐] 编程入门学习必备
    《30天自制操作系统》笔记5 --- (Day3)进入32位模式并导入C语言
    精彩知识视频分享
    《30天自制操作系统》笔记4 --- (Day2 下节)了解如何用汇编写操作系统中的HelloWorld
    《30天自制操作系统》笔记3 --- (Day2 上节)完全解析文件系统
    新版Notepad++加十六进制查看的插件HexEditor
  • 原文地址:https://www.cnblogs.com/a199706/p/11686503.html
Copyright © 2020-2023  润新知