分頁+搜索功能的實現


分頁+搜索應該是頁面上一直在用的功能了。

他們兩個分開是挺好做的,但是和起來就是另一回事了。

首先我們來分析下它們的原理,搜索是搜索的表中的某些字段亦或是模糊搜索,加起來就是一個網頁。

分頁則是需要網頁上傳過去一個當前頁,傳過去一個總頁數,后台進行總頁數/每頁展示條數。

加在一起則是

//條件查詢
    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">&#xe615;</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">&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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM