谷粒商城实战笔记-137-商城业务-首页-整合dev-tools渲染一级分类数据

文章目录

  • 一,使用热加载工具spring-boot-devtools
    • 1,引入devtools依赖
    • 2,ctrl+shift+f9 编译静态资源
  • 二,thymeleaf原理
  • 三,渲染一级分类

一,使用热加载工具spring-boot-devtools

因为我们采用的前后端一体的开发模式,前端页面会频繁修改,如果每次修改都要重启服务,效率就会受到很大影响。

可以引入spring-boot-devtools这个开发工具,避免每次修改都要重启服务。

1,引入devtools依赖

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>

引入了devtools的服务,在Idea的Services模块下,服务名后会有标识。

在这里插入图片描述

2,ctrl+shift+f9 编译静态资源

修改静态资源后,使用ctrl+shift+f9编译静态资源,之后浏览器请求的资源就是最新的了。

需要注意的是,如果修改了配置文件和Java文件,最好还是重新启动服务,否则可能导致修改的代码未生效。

二,thymeleaf原理

在这里插入图片描述
如图所示,当Controller的返回值是一个String类型时,thymeleaf将介入。

当用户访问 “localhost:10000/index.html” 这个URL时,Spring会执行以下步骤:

  1. 路由到控制器:Spring的DispatcherServlet首先捕获这个请求,并根据请求的URL和HTTP方法找到合适的处理器(在这个例子中是一个名为IndexController的类)。

  2. 注入服务层对象:在IndexController类中,有一个CategoryService对象被自动注入。这是通过@Autowired注解实现的,该注解告诉Spring将已配置的服务实例注入到控制器中。

  3. 处理请求:当请求到达IndexController后,indexPage()方法会被调用。这个方法接收一个Model参数,用于存储要传递给视图的数据。

  4. 获取数据:在indexPage()方法内部,调用了categoryService.getLevel1Categoris()方法来查询所有的1级分类。这些数据将会被添加到Model对象中。

  5. 返回视图名:最后,indexPage()方法返回了一个字符串 “index”,这表示要渲染的视图名称。Spring的视图解析器会将此字符串与默认的前缀(在这种情况下可能是"classpath:/templates/“)和后缀(”.html")组合起来,形成实际的视图路径。

  6. 渲染视图:现在,Spring将控制权交给Thymeleaf模板引擎,后者负责使用Model中的数据填充HTML模板并生成最终的HTML响应。

  7. 发送响应:最后,Spring将生成的HTML响应发送回客户端浏览器进行展示。

三,渲染一级分类

前端请求首页时,url是http://localhost:10000/,后端对应的Controller接口如下:

	(value = {"/","index.html"})private String indexPage(Model model) {//1、查出所有的一级分类List<CategoryEntity> categoryEntities = categoryService.getLevel1Categorys();model.addAttribute("categories",categoryEntities);return "index";}

这个接口首先查出所有的一级分类数据,并将存储在Model中,返回字符串index

因为返回的是字符串,所以响应会被thymeleaf拦截,thymeleafclasspath:/templates/找到index.html,把index.html作为模板,结合存储在Model中数据进行编译,将Model中的数据填充到index.html中,再将index.html返回给浏览器,由浏览器展示对应的页面。

显然,index.html中必须符合thymeleaf规范。

首先,要标明命名空间。

<html lang="en" xmlns:th="http://www.thymeleaf.org">

在这里插入图片描述

其次,要使用thymeleaf语法。

			<ul><li th:each="category : ${categories}"><a href="#" class="header_main_left_a" th:attr="ctg-data=${category.catId}" ><b th:text="${category.name}">家用电器</b></a></li></ul>

这段代码是使用 Thymeleaf 模板引擎编写的 HTML 代码,用于动态生成一个包含多个列表项 (<li>) 的无序列表 (<ul>). 每个列表项 (<li>) 都代表一个类别,并且其中包含一个链接 (<a>),该链接显示类别的名称。

  • <ul>: 开始一个无序列表标签。
  • <li th:each="category : ${categories}">: 这一行定义了一个列表项,并使用 Thymeleaf 的 th:each 属性来遍历一个名为 categories 的模型属性。这里的 category 是迭代变量,它代表列表中的每一个元素。每次迭代时,category 变量都会取 categories 列表中的一个值。
  • <a href="#" class="header_main_left_a" th:attr="ctg-data=${category.catId}">: 这是一个链接标签,其 href 属性默认设置为 "#",但实际应用中可能会通过 JavaScript 或其他方式修改。th:attr 属性用来动态地设置链接的一个自定义属性 ctg-data,其值为当前 category 对象的 catId 属性值。
  • <b th:text="${category.name}">家用电器</b>: 这是一个加粗标签 (<b>),它使用 th:text 属性来动态设置显示的文本内容。这里文本内容是当前 category 对象的 name 属性值。如果 category.name 没有值,则默认显示 "家用电器"
  • </a>: 关闭链接标签。
  • </li>: 关闭列表项标签。
  • </ul>: 关闭无序列表标签。

当这段代码由 Thymeleaf 渲染时,它会根据传入的 categories 列表生成相应数量的 <li> 元素,并为每个元素填充相应的数据。例如,如果 categories 包含三个元素,那么最终的 HTML 输出将包含三个 <li> 元素,每个元素中都有一个带有正确 ctg-data 值的链接以及显示正确类名的文本。

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

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

相关文章

全国首例 腾讯《穿越火线》协助破获DMA外挂案

据腾讯游戏安全中心公告&#xff0c;腾讯旗下的游戏《穿越火线》协助警方破获了首例DMA外挂案件。DMA即Direct Memory Access&#xff08;直接内存访问&#xff09;&#xff0c;原本是一种读写数据的计算机技术。 DMA外挂则通过特殊的软硬件工具直接访问电脑内存&#xff0c;读…

MIMO技术入门(通俗易懂)

MIMO技术的思路 形象地形容就是&#xff0c;从原来的一个人在搬砖&#xff0c;转变成多个人在搬砖。 MIMO/SIMO/MISO示意图 MIMO用专业一点的词形容&#xff0c;就是发射端和接收端都有多个天线&#xff0c;这里的多天线并不是指有多个天线板&#xff0c;对于基站来说&#…

基于Raft算法的分布式KV数据库:六、常见问题及解答

CPPRaft系列-常见问题及解答 】 目前项目中还有很多地方可以优化&#xff0c;欢迎大家参与吼吼吼。 地址在&#xff1a; https://github.com/youngyangyang04/KVstorageBaseRaft-cpp 在前面的系列文章中&#xff0c;我对这个项目提出了很多问题&#xff0c;但是发现没有解答…

科普文:微服务之全文检索ElasticSearch忝删改查详细操作说明

一、Restful简介 RESTFul&#xff1a;Representational State Transfer&#xff0c;中文意思&#xff1a;表现层状态转化。变现层指的是资源的表现层&#xff0c;这里的资源是指网络上的信息&#xff0c;比如一张图片&#xff0c;一段文本&#xff0c;一步电影&#xff0c;那么…

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

[Git][分支设计规范]详细讲解

目录 0.概览1.master分支2.release分支3.develop分支4.feature分支5.hotfix分支 0.概览 以下是常用的分支和环境的搭配&#xff0c;可视情况而定不同的策略 分支名称适用环境master主分支生产环境release预发布分支预发布/测试环境develop开发分支开发环境feature需求开发分支本…

systemd-manage系统服务图形化管理工具使用教程

1. systemd-manage介绍 systemd-manage是一个开源的基于systemd服务管理的图形化工具&#xff0c;使用qt图形库进行开发&#xff0c;可以提供服务管理&#xff0c;用户会话&#xff0c;配置文件修改&#xff0c;日志查询&#xff0c;性能分析&#xff0c;进程管理等功能。图形…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展&#xff0c;AGV&#xff08;自动导引车&#xff09;作为一种重要的物流搬运设备&#xff0c;在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一&#xff0c;直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…

HTTPS协议讲解

HTTPS协议讲解 HTTPS是什么理解加密什么是加密为什么要加密 常见的加密方式对称加密非对称加密 数据摘要/数据指纹HTTPS的工作过程探究方案一&#xff0c;只使用对称加密方案二&#xff0c;只使用非对称加密方案三&#xff0c;双方都是用非对称加密方案四&#xff0c;非对称加密…

24/8/6算法笔记 不同核函数

import numpy as np from sklearn import datasets from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt 加载数据 X,ydatasets.load_wine(return_X_y True) d…

运维工作中对反爬虫的一些思考

最近运维工作中单位的网站被攻击&#xff0c;我们的反爬虫系统已经比较严格了&#xff0c;突然有5个用户登录30多万次经我们查找发现&#xff0c;用户是正常登录&#xff0c;这一异常被我们的技术部门捕捉到第一时间响应&#xff0c;没想到常规架构已经不足以应付现在的技术了&…

机器学习练手(二):基于KMeans的股票分类

总结&#xff1a;本文为和鲸python 机器学习原理与实践闯关训练营资料整理而来&#xff0c;加入了自己的理解&#xff08;by GPT4o&#xff09; 原活动链接 在前一关我们学习了逻辑回归&#xff0c;学会如何训练模型、数据基础性分析、如何处理空值等操作&#xff0c;下面我们…

springcloud loadbalancer nacos无损发布

前言 故事背景 jenkins部署时总是会有几秒钟接口调用报错&#xff0c;观察日志是因为流量被下发到已下线的服务&#xff0c;重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用&…

面试笔记8.6

缓存 1.如何保证redis与数据库一致性 redis面试&#xff1a;如何保证缓存和数据库数据的一致性&#xff1f;_使用update更新数据,json缓存不更新-CSDN博客 如果先删除缓存&#xff0c;再删除数据库&#xff0c;数据不一致&#xff0c; 解决 删 1.先操作缓存但不删除缓存&…

C#使用NPOI进行Excel和Word文件处理(二)

文章目录 使用NPOI在C#中处理Excel和Word文件1. 什么是NPOI&#xff1f;2. 安装NPOI2.1 VisualStudio2019引入NPOI 3. 处理Excel文件读取Excel文件写入Excel文件 4. 处理Word文件读取Word文件写入Word文件 总结Github 地址链接参考例子 使用NPOI在C#中处理Excel和Word文件 在C…

linux maven仓库 删除未下载完成的包 lastUpdated文件

以下命令查找.lastUpdated文件所在目录&#xff0c;并删除所在目录(maven包的版本目录&#xff09;。 $ find ~/.m2/repository/ -regex ".*\.lastUpdated" | xargs dirname | xargs rm -rf查找未下载完成的文件 $ find ~/.m2/repository/ -regex ".*\.lastUp…

使用 docker 快速搭建独角数卡发卡网

docker版本的发卡程序搭建 项目1&#xff1a;https://github.com/assimon/dujiaoka 项目2&#xff08;基于项目1&#xff09;&#xff1a;https://github.com/Apocalypsor/dujiaoka-docker 一键安装脚本 curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/m…

系统化学习 H264视频编码(06)哥伦布编码解读

说明&#xff1a;我们参考黄金圈学习法&#xff08;什么是黄金圈法则?->模型 黄金圈法则&#xff0c;本文使用&#xff1a;why-what&#xff09;来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法&#xff0c;理论方面会更多地讲清楚 音视频中概念的…

C语言典型例题28

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.5 输入一个华氏温度&#xff0c;要求输出摄氏温度。公式为C5/9(F-32)&#xff0c;要求输出要有文字说明&#xff0c;取两位小数 数学知识&#xff1a; &#xff08;1&#xff09;华氏温度与摄氏温度&#x…

E2000 RGMII0通讯异常问题总结

最近让新来小朋友做了一款E2000Q的板卡,使用了E2000Q上的两个RGMII资源,外接YT8521转出了电口。 但是他调试中遇到了一个比较奇怪的问题,两套YT8521的电路都一样,但是一路通一路不通。 也就是框图中MAC2(芯片RGMII0,系统对应eth1)那路网络不通,图中MAC3(芯片RGMII1,…