thymeleaf双重循环_spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)

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

当我们展示多个分类时,每个分类下又展示出推荐的前几个商品,

这时我们需要用到嵌套循环

看一个例子:

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

二,演示项目的相关信息

1,项目地址:

https://github.com/liuhongdi/templateloop

2,项目功能说明:

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

3,项目结构;如图:

三,配置文件说明

1,pom.xml

org.springframework.boot

spring-boot-starter-thymeleaf

2,application.properties

#errorserver.error.include-stacktrace=always#errorlogging.level.org.springframework.web=trace

#thymeleaf

spring.thymeleaf.cache=falsespring.thymeleaf.encoding=UTF-8spring.thymeleaf.mode=HTML

spring.thymeleaf.prefix=classpath:/templates/spring.thymeleaf.suffix=.html

四,java程序说明

1,Category.java

//分类模型

public classCategory {//分类id

Long categoryId;publicLong getCategoryId() {return this.categoryId;

}public voidsetCategoryId(Long categoryId) {this.categoryId =categoryId;

}//分类名称

privateString categoryName;publicString getCategoryName() {return this.categoryName;

}public voidsetCategoryName(String categoryName) {this.categoryName =categoryName;

}//打印

publicString toString(){return " Category:categoryId=" + categoryId +" categoryName=" +categoryName;

}

}

2,Goods.java

//商品模型

public classGoods {//商品id

Long goodsId;publicLong getGoodsId() {return this.goodsId;

}public voidsetGoodsId(Long goodsId) {this.goodsId =goodsId;

}//商品名称

privateString goodsName;publicString getGoodsName() {return this.goodsName;

}public voidsetGoodsName(String goodsName) {this.goodsName =goodsName;

}//商品标题

privateString subject;publicString getSubject() {return this.subject;

}public voidsetSubject(String subject) {this.subject =subject;

}//商品价格

privateBigDecimal price;publicBigDecimal getPrice() {return this.price;

}public voidsetPrice(BigDecimal price) {this.price =price;

}//库存

intstock;public intgetStock() {return this.stock;

}public void setStock(intstock) {this.stock =stock;

}//打印

publicString toString(){return " Goods:goodsId=" + goodsId +" goodsName=" + goodsName+" subject=" + subject+" price=" + price+" stock=" +stock;

}

}

3,HomeController.java

@Controller

@RequestMapping("/home")public classHomeController {//返回分栏目的商品列表

@GetMapping("/category")publicString home(Model model) {//统一使用一个list返回

ArrayList> list = new ArrayList<>();//每个分类及分类下的推荐商品,用一个map来保存//第一个分类

Map map1 = new HashMap();

Category category1= newCategory();

category1.setCategoryId(1L);

category1.setCategoryName("家居");

map1.put("category",category1);//保存商品用的list

ArrayList listGoods1 = new ArrayList();

Goods goods1= newGoods();

goods1.setGoodsId(1L);

goods1.setGoodsName("无线智能感应灯");

listGoods1.add(goods1);

Goods goods2= newGoods();

goods2.setGoodsId(2L);

goods2.setGoodsName("朱之光落地灯");

listGoods1.add(goods2);

Goods goods3= newGoods();

goods3.setGoodsId(3L);

goods3.setGoodsName("儿童抗首菌枕头");

listGoods1.add(goods3);

Goods goods4= newGoods();

goods4.setGoodsId(4L);

goods4.setGoodsName("按摩床垫升级款");

listGoods1.add(goods4);

Goods goods5= newGoods();

goods5.setGoodsId(5L);

goods5.setGoodsName("北欧简约金属茶几");

listGoods1.add(goods5);

map1.put("goodslist",listGoods1);//把map1添加到list

list.add(map1);//第二个分类

Map map2 = new HashMap();

Category category2= newCategory();

category2.setCategoryId(2L);

category2.setCategoryName("美护");

map2.put("category",category2);

ArrayList listGoods2 = new ArrayList();

Goods goods21= newGoods();

goods21.setGoodsId(21L);

goods21.setGoodsName("护手霜套装");

listGoods2.add(goods21);

Goods goods22= newGoods();

goods22.setGoodsId(22L);

goods22.setGoodsName("美白牙贴");

listGoods2.add(goods22);

Goods goods23= newGoods();

goods23.setGoodsId(23L);

goods23.setGoodsName("口腔护理泡沫");

listGoods2.add(goods23);

map2.put("goodslist",listGoods2);//把map2添加到list

list.add(map2);//第三个分类

Map map3 = new HashMap();

Category category3= newCategory();

category3.setCategoryId(3L);

category3.setCategoryName("服装");

map3.put("category",category3);

ArrayList listGoods3 = new ArrayList();

Goods goods31= newGoods();

goods31.setGoodsId(31L);

goods31.setGoodsName("纯色真丝睡袍");

listGoods3.add(goods31);

Goods goods32= newGoods();

goods32.setGoodsId(32L);

goods32.setGoodsName("蚕丝条纹睡衣套装");

listGoods3.add(goods32);

Goods goods33= newGoods();

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CUBA平台:TypeScript SDK和REST API

在本文中&#xff0c;我们将讨论已存在很长时间但尚未广为人知的CUBA平台的功能- 前端SDK生成器 &#xff0c;并了解它如何与CUBA的REST API插件一起使用 。 Java JavaScript –网络婚姻 仅八年前&#xff0c;我们Java开发人员在我们的Web应用程序中使用JavaScript作为“第二…

wifiphisher 依赖_铂瑞思:总是依赖别人的话,就永远也长不大

我们每个人都会或多或少的对他人产生依赖&#xff0c;依赖一词&#xff0c;可被定义为过度需要依靠他人的支持、指导、照顾和保护。但一部分人由于形成了与他人不同的思维与行为模式&#xff0c;导致了依赖型人格障碍的产生。依赖性人格障碍以过分依赖为特征&#xff0c;表现为…

米兔机器人自主编程_978个零件+自主编程,米兔机器人价格仅为友商八分之一...

作为一个“大孩子”&#xff0c;我也喜欢拼积木&#xff0c;看重了一款乐高的可变性积木竟然售价4000多&#xff0c;太贵了&#xff0c;实在买不起。然后就搜索到了小米的这款米兔儿童机器人&#xff0c;性能上能达到乐高95%以上&#xff0c;价格却只有八分之一&#xff0c;果断…

网站开发用什么语言好_网站开发教程:企业如何用网站开启在线业务?

用网站来开启互联网在线业务是很好的方法&#xff0c;对于创业型企业来说&#xff0c;进行自己的企业网站开发制作能够加快实现品牌业务目标。下面这个教程将会教你如何开展在线业务、并利用网站来扩大业务&#xff01;1.确定目标市场创业团队需要明确自己的目标市场&#xff0…

c语言字符指针初始化赋值,C语言_指针变量的赋值与运算,很详细详解

指针变量的赋值指针变量同普通变量一样&#xff0c;使用之前不仅要定义说明&#xff0c; 而且必须赋予具体的值。未经赋值的指针变量不能使用&#xff0c; 否则将造成系统混乱&#xff0c;甚至死机。指针变量的赋值只能赋予地址&#xff0c; 决不能赋予任何其它数据&#xff0c…

ospf工作原理_OSPF动态路由配置经典案例

前导知识点&#xff1a;静态路由结合上一讲讲解的距离矢量路由协议&#xff0c;本讲我们讲解链路状态路由协议----OSPF&#xff0c;相比较于RIP&#xff0c;OSPF能够支持大型网络&#xff0c;下面列出RIP和OSPF的对比图&#xff0c;进一步说明了OSPF的强大。RIP最多支持15台路由…

gridview ashx实现数据更新_Python分析了香港26281套在售二手房数据,结果发现

作者&#xff1a;J哥背景香港的贫富差距问题一直十分尖锐&#xff0c;最突出的体现就是收入和楼价的巨大差异。早在60年代末香港房价就经历了暴涨&#xff0c;人们早已对不动产的金融属性了如指掌&#xff0c;全港的投资情绪一直都相当火热。即便香港当前失业率高企&#xff0c…

线性单链表存储结构c语言代码,单链表定义-(线性表的链表存储结构)

线性表分为:顺序存储结构和连存储结构顺序存储结构的优点:1.空间利用率高,几乎不需要额外的空间开销.2.数据的逻辑结构和物理结构完全一致.3.结点地址计算的时间和线性表的规模大小无关.4.可以用一维数组实现存储.但是有两个致命的缺点:1.顺序存储结构的存储空间是静态分配,必须…

idea 自动生成mybaits_怎么让idea自动创建mybatis配置文件

已采纳一、在pom.xml中添加plugin其中generatorConfig.xml的位置&#xff0c;大家根据实际情况自行调整二、generatorConfig.xml配置文件1 <?xml version"1.0" encoding"UTF-8"?>2 /p>3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Co…

奇奇seo优化软件_西藏seo关键词优化软件

西藏seoxaa0c1关键词优化软件&#xff0c;网站在建立时搜索引擎是较为完善的基本上是不太需要长期进行优化的&#xff0c;但是近几年搜索引擎优化的频率开始增加&#xff0c;这让人有些好奇&#xff0c;搜索引擎优化的目的是什么&#xff1f;为什么受企业欢迎呢&#xff1f;网站…

c语言出现源文件未编译,dev运行C语言出问题

dev运行时出现源文件未编译的情况是什么原因&#xff0c;应该怎么样解决呢#include int main(){int day,month,year,sum,leap;printf("\n请输入年、月、日&#xff0c;格式为&#xff1a;年,月,日(2015,12,10)\n");scanf("%d,%d,%d",&year,&month,…

学习理发去哪里_学习美发去哪里学

于是你会发现&#xff0c;和师傅学的这条路走不通&#xff0c;只是学了些二把刀的技术&#xff0c;混混小店还行&#xff0c;大店那更是遥不可及的事情。这次你终于下定决心&#xff0c;准备到学校去学学看&#xff0c;可是真正要学的时候你才发现&#xff0c;选择学校比去美发…

lucene自动补全_使用自动机的Lucene新的邻近查询

lucene自动补全最简单的Apache Lucene查询TermQuery匹配包含指定术语的任何文档&#xff0c;无论该术语出现在每个文档中的何处 。 使用BooleanQuery可以将多个TermQuery组合在一起&#xff0c;并完全控制哪些术语是可选的&#xff08; SHOULD &#xff09;和哪些是必需的&…

npm install 报错 汇总_2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总...

原标题&#xff1a;2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总昨天晚上安徽省2020年特岗教师招聘空缺计划征集志愿拟参加面试人员名单已经公布啦&#xff0c;接下来陆续就是资格复审和面试啦小可爱们一点要关注各地复审时间啊2020年特岗教师招聘征集志愿人员资格复…

用c语言计算sin x 的值,用泰勒公式求sin(x)的近似值

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #define PI 3.1415927double FACT(double x);double fact(int n);int main(){int n,i,k,flag;double x,sin,temp,index;while(scanf("%lf%d",&x,&n)!EOF){FACT(x);flag1; index0.1; tempx; si…

pb 调用虹软_python调用虹软2.0

1 from ctypes import *2 #人脸框3 class MRECT(Structure):4 _fields_[(uleft1,c_int32),(utop1,c_int32),(uright1,c_int32),(ubottom1,c_int32)]5 #版本信息 版本号,构建日期,版权说明6 class ASF_VERSION(Structure):7 _fields_[(Version,c_char_p),(BuildDate,c_char_p),(…

使用Java和JSF构建一个简单的CRUD应用

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 JavaServer Faces&#xff08;JSF&#xff09;是用于构建Web应用程序的Java框架&#xff0c;其中心是作为用户界面构建…

ftp 传输速度_ftp上传工具下载,8款优秀的ftp上传工具下载软件

FTP上传工具现在有很多种&#xff0c;而且各有各的特点&#xff0c;至于FTP上传工具哪个好用呢&#xff1f;小编认为萝卜白菜各有所爱&#xff0c;看个人喜好&#xff0c;还结合服务器和各种功能方面的需求。小编用的就是iis7服务器管理工具&#xff0c;比较方便而且功能不错&a…

c语言实践教程实验题答案,C语言课后实验教程习题答案

第5章以后的答案第五章答案-1-1. 【答案】&#xff1a; (1) m1 n2 (2) m2 n3 (3) a>0 并且a2. 【答案】&#xff1a;(2)for (i0;i<10;i) {……} 3. 【答案】&#xff1a;32 4. 【答案】&#xff1a; main() {char x ;int y;printf("please input :");scanf(&qu…

t分布 u分布 卡方分布_中心极限定理|z分布|t分布|卡方分布

生物统计学抽样分布&#xff1a;n个样本会得到n个统计量&#xff0c;将这n个统计量作为总体&#xff0c;该总体的分布即是抽样分布根据辛钦大数定律&#xff0c;从一个非正态分布的总体中抽取的含量主n的样本&#xff0c;当n充分大时&#xff0c;样本平均数渐近服从正态分布。因…