zoukankan      html  css  js  c++  java
  • spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)

    一,什么情况下会用到嵌套循环?

       当我们展示多个分类时,每个分类下又展示出推荐的前几个商品,
       这时我们需要用到嵌套循环

       看一个例子:

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

    说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,演示项目的相关信息

    1,项目地址:

    https://github.com/liuhongdi/templateloop

    2,项目功能说明:

            演示了模板中常用的嵌套循环

    3,项目结构;如图:

    三,配置文件说明

    1,pom.xml

            <!--thymeleaf begin-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <!--thymeleaf   end-->

    2,application.properties

    #error
    server.error.include-stacktrace=always
    #error
    logging.level.org.springframework.web=trace
    
    #thymeleaf
    spring.thymeleaf.cache=false
    spring.thymeleaf.encoding=UTF-8
    spring.thymeleaf.mode=HTML
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.suffix=.html

    四,java程序说明

    1,Category.java

    //分类模型
    public class Category {
    
        //分类id
        Long categoryId;
        public Long getCategoryId() {
            return this.categoryId;
        }
        public void setCategoryId(Long categoryId) {
            this.categoryId = categoryId;
        }
    
        //分类名称
        private String categoryName;
        public String getCategoryName() {
            return this.categoryName;
        }
        public void setCategoryName(String categoryName) {
            this.categoryName = categoryName;
        }
    
        //打印
        public String toString(){
            return " Category:categoryId=" + categoryId +" categoryName=" + categoryName;
        }
    }

    2,Goods.java

    //商品模型
    public class Goods {
        //商品id
        Long goodsId;
        public Long getGoodsId() {
            return this.goodsId;
        }
        public void setGoodsId(Long goodsId) {
            this.goodsId = goodsId;
        }
    
        //商品名称
        private String goodsName;
        public String getGoodsName() {
            return this.goodsName;
        }
        public void setGoodsName(String goodsName) {
            this.goodsName = goodsName;
        }
    
        //商品标题
        private String subject;
        public String getSubject() {
            return this.subject;
        }
        public void setSubject(String subject) {
            this.subject = subject;
        }
    
        //商品价格
        private BigDecimal price;
        public BigDecimal getPrice() {
            return this.price;
        }
        public void setPrice(BigDecimal price) {
            this.price = price;
        }
    
        //库存
        int stock;
        public int getStock() {
            return this.stock;
        }
        public void setStock(int stock) {
            this.stock = stock;
        }
    
        //打印
        public String toString(){
            return " Goods:goodsId=" + goodsId +" goodsName=" + goodsName+" subject=" + subject+" price=" + price+" stock=" + stock;
        }
    }

    3,HomeController.java

    @Controller
    @RequestMapping("/home")
    public class HomeController {
    
        //返回分栏目的商品列表
        @GetMapping("/category")
        public String home(Model model) {
            //统一使用一个list返回
            ArrayList<Map<String,Object>> list = new ArrayList<>();
    
            //每个分类及分类下的推荐商品,用一个map来保存
            //第一个分类
            Map<String,Object> map1 = new HashMap<String,Object>();
            Category category1 = new Category();
    
            category1.setCategoryId(1L);
            category1.setCategoryName("家居");
            map1.put("category",category1);
    
            //保存商品用的list
            ArrayList<Goods> listGoods1 = new ArrayList<Goods>();
    
            Goods goods1 = new Goods();
            goods1.setGoodsId(1L);
            goods1.setGoodsName("无线智能感应灯");
            listGoods1.add(goods1);
            Goods goods2 = new Goods();
            goods2.setGoodsId(2L);
            goods2.setGoodsName("朱之光落地灯");
            listGoods1.add(goods2);
            Goods goods3 = new Goods();
            goods3.setGoodsId(3L);
            goods3.setGoodsName("儿童抗首菌枕头");
            listGoods1.add(goods3);
            Goods goods4 = new Goods();
            goods4.setGoodsId(4L);
            goods4.setGoodsName("按摩床垫升级款");
            listGoods1.add(goods4);
            Goods goods5 = new Goods();
            goods5.setGoodsId(5L);
            goods5.setGoodsName("北欧简约金属茶几");
            listGoods1.add(goods5);
            map1.put("goodslist",listGoods1);
    
            //把map1添加到list
            list.add(map1);
    
            //第二个分类
            Map<String,Object> map2 = new HashMap<String,Object>();
            Category category2 = new Category();
            category2.setCategoryId(2L);
            category2.setCategoryName("美护");
            map2.put("category",category2);
            ArrayList<Goods> listGoods2 = new ArrayList<Goods>();
            
            Goods goods21 = new Goods();
            goods21.setGoodsId(21L);
            goods21.setGoodsName("护手霜套装");
            listGoods2.add(goods21);
            Goods goods22 = new Goods();
            goods22.setGoodsId(22L);
            goods22.setGoodsName("美白牙贴");
            listGoods2.add(goods22);
            Goods goods23 = new Goods();
            goods23.setGoodsId(23L);
            goods23.setGoodsName("口腔护理泡沫");
            listGoods2.add(goods23);
            map2.put("goodslist",listGoods2);
            //把map2添加到list
            list.add(map2);
    
            //第三个分类
            Map<String,Object> map3 = new HashMap<String,Object>();
            Category category3 = new Category();
            category3.setCategoryId(3L);
            category3.setCategoryName("服装");
            map3.put("category",category3);
            ArrayList<Goods> listGoods3 = new ArrayList<Goods>();
            
            Goods goods31 = new Goods();
            goods31.setGoodsId(31L);
            goods31.setGoodsName("纯色真丝睡袍");
            listGoods3.add(goods31);
            Goods goods32 = new Goods();
            goods32.setGoodsId(32L);
            goods32.setGoodsName("蚕丝条纹睡衣套装");
            listGoods3.add(goods32);
            Goods goods33 = new Goods();
            goods33.setGoodsId(33L);
            goods33.setGoodsName("牛津长袖衬衫");
            listGoods3.add(goods33);
            map3.put("goodslist",listGoods3);
            ////把map3添加到list
            list.add(map3);
    
            //把list传递给模板
            model.addAttribute("list",list);
            return "home/category.html";
        }
    }

    说明:我们没有使用数据库,因为只是用于演示,

            直接用代码写入了11条数据,共三个分类

            每个分类的数据各放入一个map中,最后用一个list传递给模板

    4,category.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    </head>
    <body>
    <div style="100%;height:30px;background:#ffffff;font-size: 16px;" ></div>
    <div id="content" style="1040px;">
        <div style="790px;float:left;margin-left:30px;">
            <!--main begin-->
            <div th:each="categoryOne:${list}" style="790px;font-size:16px;overflow: hidden;">
                <!--显示分类信息-->
                <div style="background:#eeeeee;790px;height:20px;line-height:20px;overflow: hidden;margin-top: 10px;">
                    <div style="200px;float:left;">
                    分类ID:<span th:text="${categoryOne.category.categoryId}"></span> 分类名称:<span th:text="${categoryOne.category.categoryName}"></span>
                    </div>
    
                    <div style="200px;float:right;text-align: right;">
                        <a th:href="@{/goods/goodslist/(categoryid=${categoryOne.category.categoryId})}">更多...</a>
                    </div>
                </div>
                <!--显示分类下的商品列表信息-->
                <div style="790px;height:100px;">
                    <div th:each="goodsOne:${categoryOne.goodslist}" style="250px;height:100px;float: left;background:#eeeeee;margin-left:10px;margin-top:10px;">
                        <div>商品ID:[[${goodsOne.goodsId}]]</div>
                        <div>商品名称:[[${goodsOne.goodsName}]]</div>
                    </div>
                </div>
            </div>
            <!--main   end-->
        </div>
    </div>
    </body>
    </html>

    注意代码中用了th:each嵌套循环了两层,变量名分别用了categoryOne和goodsOne

    五,测试效果

    访问:

    http://127.0.0.1:8080/home/category

    返回:

     循环展示了多个分类下的多个商品

    六,查看spring boot版本

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.3.2.RELEASE)
  • 相关阅读:
    查看Eclipse版本号的方法
    设置Eclipse的字体风格方式
    又遇两个小异常
    我所推崇的三种心态
    关于javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt;
    Http请求中Content-Type讲解
    ftp实现文件上传(下载)
    解析html文档的java库及范例
    xslt循环转换子元素
    XPath学习:轴(1)——child
  • 原文地址:https://www.cnblogs.com/architectforest/p/13490059.html
Copyright © 2011-2022 走看看