模糊查詢下的分頁功能

今天練習了一個購物車功能,其中有點難度的要數模糊查詢下的分頁功能,這裏簡單分析一下。數據庫

練習中沒有用到數據庫,而是本地緩存。後端

  • 從頁面開始分析:

對應的代碼:緩存

向後端傳遞page(當前頁碼),titlejsp

  • servlet:當前頁碼,下一頁,上一頁,總頁數,符合title的商品的總數量
public class ProductServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String pageStr=req.getParameter("page"); String title=req.getParameter("title"); int page=1; if (pageStr!=null){ page=Integer.valueOf(pageStr); } //統計總共的條目 int totalProducts=LocalCache.getProductCount(title); //LocalCache類中處理 int totalPages=totalProducts%10==0?totalProducts/10:totalProducts/10+1; req.setAttribute("curPage",page); req.setAttribute("prePage",page>1?page-1:1); req.setAttribute("nextPage",page<totalPages?page+1:totalPages); req.setAttribute("totalPage",totalPages); req.setAttribute("title",title); req.setAttribute("products",LocalCache.getProducts(page,10,title));//根據當前頁,每頁顯示的商品的數量,title進行查詢出一個字列表,在LocalCache中處理 req.getRequestDispatcher("/WEB-INF/views/biz/list.jsp").forward(req,resp); } }
//LocalCache類中的方法
public
static int getProductCount(String title){
List
<Product> products=new ArrayList<>(); if (title!=null&&title.length()!=0){ productMap.values().forEach(product -> { //productMap.values()表示存儲在Map中的全部商品 //lambda表達式 if (product.getTag().contains(title)){ //若商品的標籤中包含了title,將它加入到新建的List中 products.add(product); } }); }else{                        //若title爲空,說明沒有進行模糊搜索,將全部的商品放入List中 products.addAll(productMap.values()); } return products.size(); //返回商品的數量 }
//分頁處理
    public static List<Product> getProducts(int page, int size,String title){

        List<Product> products=new ArrayList<>();
        if (title!=null&&title.length()!=0){
            productMap.values().forEach(product -> {
                //lambda表達式
                if (product.getTag().contains(title)){
                    products.add(product);
                }
            });
        }else{
            products.addAll(productMap.values());        //與上一個方法相同,主要爲了拿到添加完成以後的products對象
        }
        //當前頁數與當前頁的第一個商品在集合中索引的關係,例如:10個數據分2頁,第二頁的第一個商品的索引值是5,(2-1)*5
        int start=(page-1)*size;
        int end=products.size()>=page*size?page*size:products.size();
        return products.subList(start,end);          //實現分頁的關鍵
    }

 在點擊上一頁/下一頁進行查詢的時候,要將id和title一同傳到後臺,這樣才能正確查詢,因此前臺的頁面:ide

          <form method="post" action="/product/list.do" style="display: inline">
                    <input type="hidden" name="page" value="1">
                    <input type="hidden" name="title" value="${title}">
                    <input type="submit" value="首頁" class="btn">
                </form>
                <form method="post" action="/product/list.do" style="display: inline">
                    <input type="hidden" name="page" value="${prePage}">
                    <input type="hidden" name="title" value="${title}">
                    <input type="submit" value="上一頁" class="btn">
                </form>
                <form method="post" action="/product/list.do" style="display: inline">
                    <input type="hidden" name="page" value="${nextPage}">
                    <input type="hidden" name="title" value="${title}">
                    <input type="submit" value="下一頁" class="btn">
                </form>
                <form method="post" action="/product/list.do" style="display: inline">
                    <input type="hidden" name="page" value="${totalPage}">
                    <input type="hidden" name="title" value="${title}">
                    <input type="submit" value="尾頁" class="btn">

 但願可以理解!post

相關文章
相關標籤/搜索