分頁+搜索功能的實現

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

他們兩個分開是挺好作的,可是和起來就是另外一回事了。java

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

分頁則是須要網頁上傳過去一個當前頁,傳過去一個總頁數,後臺進行總頁數/每頁展現條數。jsp

加在一塊兒則是post

//條件查詢
    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;            
    }

serviceui

//分頁:爲了封裝一個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;
        }

cotrollerspa

    //搜索
                //解決亂碼
                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);
    }

jspcode

<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>

相關文章
相關標籤/搜索