模糊查询下的分页功能


今天练习了一个购物车功能,其中有点难度的要数模糊查询下的分页功能,这里简单分析一下。

练习中没有用到数据库,而是本地缓存。

  • 从页面开始分析:

对应的代码:

向后端传递page(当前页码),title

  • 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一同传到后台,这样才能正确查询,所以前台的页面:

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

 希望能够理解!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM