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

news2025/2/28 16:27:22

文章目录

  • 一,使用热加载工具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.coloradmin.cn/o/1987383.html

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

相关文章

Windows 平台 Docker Protainer可视化平台,忘记登录密码,重置密码

下载protainer 的文件 运行重置密码的密令 docker run --rm -v C:\Users\Administrator\AppData\Local\Docker:/data portainer/helper-reset-password成功运行后可以看到重置的密码 把key 和db 文件重新上传到容器里 docker cp portainer.key portainer:/data/portainer.k…

5.10.结构化开发方法-结构化分析

案例分析第一题会考 结构化特点&#xff1a;自顶向下&#xff0c;逐步分解&#xff0c;面向数据。三大模型&#xff1a;功能模型&#xff08;数据流图&#xff09;、行为模型&#xff08;状态转换图&#xff09;、数据模型(E-R图)以及数据字典。 数据流图DFD 数据流图DFD基…

网络IO模型及零拷贝问题

文章目录 BIOaccept监听案例read案例利用多线程 NIO案例NIO存在的问题 IO multiplexing-IO多路复用文件描述符(FD&#xff0c;句柄&#xff09; 是什么reactor反应模式 select方法优点缺点小总结 poll方法优点缺点 epoll方法 Reactor模式单Reactor单线程 单Reactor多线程主从Re…

linux docker安装 gitlab后忘记root密码如何找回

1. docker ps - a 查看当前gitlab 当前的id2. docker exec -it gitlab /bin/bash 进入docker git 容器中【gitlab 注意可以上图中的name&#xff0c;也可以是id都可以的】,如下图3.gitlab-rails console -e production 输入该指令&#xff0c;启动Ruby on Rails控制台&…

Copy as cURL 字段含义

当前端在开发过程中&#xff0c;遇到接口错误反馈给后端人员时&#xff0c;一般在此接口处右键复制为cURL。 格式如下&#xff1a; curl https://xxx.xxx.cn/xxx/xxx/management/record/list \-H accept: application/json, text/plain, */* \-H accept-language: zh-CN,zh;q0…

LVS集群中的负载均衡技术

目录 1、LVS技术原理 2、NAT模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、软件安装与启用 3、测试 2、DR模式工作原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、解决vip响应问题 3、测试 3、ipvsadm命令及参数 1.管理集群服务中的增删…

数据同步工具之Flink CDC

Flink CDC&#xff08;Change Data Capture&#xff09;是基于Apache Flink的一个扩展&#xff0c;用于捕获和处理数据库中的数据变化。它能够实时捕获关系数据库中的数据变更&#xff08;如插入、更新、删除操作&#xff09;&#xff0c;并将这些变更流式传输到Flink进行处理。…

【OceanBase系列】—— OceanBase应急三板斧

作者&#xff1a; 花名&#xff1a;洪波&#xff0c; OceanBase 数据库解决方案架构师 目前随着OceanBase数据库越来越流行&#xff0c;社区已经有很多用户在生产环境使用了OceanBase&#xff0c;也有不少用户的核心业务用到了OceanBase数据库&#xff0c;在使用OceanBase数据库…

演示:基于WPF的DrawingVisual开发的矢量地图

一、目的&#xff1a;基于WPF的DrawingVisual开发的矢量地图 二、预览 默认样式 深黑样式 深蓝色样式 深蓝色透明样式 三、环境 VS2022&#xff0c;Net7&#xff0c;GDAL,审图号为GS(2019)1822号矢量数据,DrawingVisual 四、主要功能 支持多种显示样式&#xff08;默认样式&…

代码随想录27期|Python|Day39|​62. 不同路径​|​63. 不同路径 II​

62. 不同路径 简单题。由于规定了只能走右边和下边&#xff0c;所以右下角的值等于左对角线的两数之和。 1、确定dp和下标&#xff1a;二维数组&#xff0c;i&#xff0c;j分别为行和列&#xff0c;dp值为所需步数&#xff1b; 2、 初始化&#xff1a;只有上边和左边全部初始…

Java二十三种设计模式-享元模式(12/23)

享元模式&#xff1a;高效管理大量对象的设计模式 引言 在软件开发中&#xff0c;有时需要处理大量相似或重复的对象&#xff0c;这可能导致内存使用效率低下和性能问题。享元模式提供了一种解决方案&#xff0c;通过共享对象的共同部分来减少内存占用。 基础知识&#xff0c…

Apache OFBiz 曝出严重漏洞,允许预身份验证 RCE

近日&#xff0c;研究人员发现 Apache OFBiz 中存在一个新的关键漏洞&#xff0c;该漏洞是 Apache OFBiz 中的一个错误授权问题&#xff0c;被追踪为CVE-2024-38856。该漏洞影响 18.12.14 之前的版本&#xff0c;18.12.15 版本解决了该漏洞。 SonicWall 的安全研究员 Hasib Vh…

字节跳动发Seed-TTS语音合成模型,可模仿任意人的声音,效果逼真

前期我们介绍过很多语音合成的模型&#xff0c;比如ChatTTS&#xff0c;微软语音合成大模型等&#xff0c;随着大模型的不断进步&#xff0c;其合成的声音基本跟真人没有多大的区别。本期介绍的是字节跳动自家发布的语音合成模型Seed-TTS。 Seed-TTS 推理包含四个功能模块&…

JavaScript中判断变量的类型

数据类型 在 JavaScript 中有 8 种基本的数据类型&#xff08;7 种原始类型和 1 种引用类型&#xff09;&#xff0c;它们分别是&#xff1a; 原始类型/基本类型&#xff1a; Number&#xff0c;BigInt&#xff0c;String&#xff0c;Boolean&#xff0c;null&#xff0c;unde…

C++开发基础之深入理解C++中的两种单例模式实现——线程安全与效率的权衡

引言&#xff1a; 单例模式是设计模式中的一种&#xff0c;它保证一个类仅有一个实例&#xff0c;并提供一个全局访问点。在C中&#xff0c;实现单例模式的方式多种多样&#xff0c;但随着多线程应用的普及&#xff0c;如何确保单例模式在多线程环境下的线程安全性成为了一个重…

深度学习--图像分割UNet介绍及代码分析

UNet介绍 参考UNet网络介绍整体架构UNet过程输入编码器&#xff08;下采样&#xff09;中间特征表示解码器&#xff08;上采样&#xff09;输出 代码详解unetUP和Unet关系上采样模块——unetUp用于图像分割的卷积神经网络&#xff08;CNN&#xff09;架构模块——Unet类的定义初…

使用 Manim 创建一个二维坐标平面【NumberPlane】

NumberPlane 是 Manim 中用于创建一个二维坐标平面的类。它可以帮助用户在场景中可视化坐标轴、网格线以及其他数学概念。具体来说&#xff0c;它的功能包括&#xff1a; 坐标轴&#xff1a;NumberPlane 提供了 x 轴和 y 轴&#xff0c;通常是中心对称的&#xff0c;允许用户清…

深入探究Python反序列化漏洞:原理剖析与实战复现

在现代应用程序开发中&#xff0c;Python反序列化漏洞已成为一个备受关注的安全问题。反序列化是Python中用于将字节流转换回对象的过程&#xff0c;但如果没有妥善处理&#xff0c;攻击者可以通过精心构造的恶意数据&#xff0c;利用反序列化漏洞执行任意代码&#xff0c;进而…

前端day4-表单标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>day4-表单</title> </head> <body&g…

# 基于MongoDB实现商品管理系统(2)

基于MongoDB实现商品管理系统&#xff08;2&#xff09; 基于 mongodb 实现商品管理系统之准备工作 1、案例需求 这里使用的不是前端页面&#xff0c;而是控制台来完成的。 具体的需求如下所示&#xff1a; 运行 查询所有 通过id查询详情 添加 - 通过id删除 2、案例分析 程…