Spring Boot学习随笔- 第一个Thymeleaf应用(基础语法th:,request、session作用域取值)

学习视频:【编程不良人】2021年SpringBoot最新最全教程

第十五章、Thymeleaf

Thymeleaf是一种现代化的服务器端Java模板引擎,专门用于Web和独立环境。Thymeleaf在有网络和无网络的环境下皆可运行,即可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。它与Spring Boot集成良好,是Spring Boot官方支持的模板引擎之一。

  • 比较其他模板引擎

    目前主流模板引擎:Thymeleaf、FreeMarker、Groovy和Mustache

    整体来说:FreeMarker在性能方面略有优势,但Thymeleaf在整体上胜出

注意:jsp可以直接在服务器访问,而Thymeleafa必须要经过控制器跳转访问

第一个Thymeleafaf网页

  1. 引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>**spring-boot-starter-thymeleaf**</artifactId>
    </dependency>
    
  2. 配置thymeleaf模板配置

    # THYMELEAF (ThymeleafAutoConfiguration)
    spring:
      thymeleaf:
        cache: false # 开启模板缓存(默认值: true ) 开发过程中改成false
        check-template: true # 检查模板是否存在,然后再呈现
        check-template-location: true # 检查模板位置是否正确(默认值 :true )
        servlet:
          content-type: text/html #Content-Type 的值(默认值: text/html )
        enabled: true # 开启 MVC Thymeleaf 视图解析(默认值: true )
        encoding: UTF-8 # 模板编码
        excluded-view-names:  # 要被排除在解析之外的视图名称列表,⽤逗号分隔
        mode: HTML5 # 要运⽤于模板之上的模板模式。另⻅ StandardTemplate-ModeHandlers( 默认值: HTML5)
        prefix: # 在构建 URL 时添加到视图名称前的前缀(默认值: classpath:/templates/ )
        suffix: # 在构建 URL 时添加到视图名称后的后缀(默认值: .html )
    
  3. 创建thymeleaf页面

  4. 开发Controller跳转thymeleaf

    @Controller
    @RequestMapping("hello")
    public class HelloController {
    		@RequestMapping("hello")
        public String hello() {
            System.out.println("hello thymeleaf ");
            return "index";
        }
    }
    

Thymeleaf语法使用

  1. html使用thymeleaf语法,必须引入命名空间

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

    **th 可以用于html标签的任意属性,非常方便,它允许在HTML、XML、JavaScript、CSS甚至纯文本中处理模板。th命名空间允许我们在HTML标签的任何属性中使用Thymeleaf表达式,这样我们可以将模型数据动态地绑定到HTML标签的属性中。**

  2. 基本数据传递,**th:text**属性取值

    @RequestMapping("demo")
    public String demo(HttpServletRequest request, Model model) {
        System.out.println("hello thymeleaf ");
        request.setAttribute("name", "小陈");
        model.addAttribute("age", 22);
        return "demo";
    }
    
    <!doctype html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>测试thymeleaf语法</title>
    </head>
    <body>
        <h1>thymeleaf基本语法</h1>
    		thymeleaf取值的方式和jstl差不多,不过必须要在html标签里使用,通过${},括号
    里面填入作用域存的属性名
        <h4>获取request作用域的基本数据 <span **th:text="${name}"**></span></h4>
        <h4>获取request作用域的基本数据 <span **th:text="${age}"**></span></h4>
    </body>
    </html>
    
    • th:utext 属性

      **th:utext**会将文本内容作为原始HTML代码进行处理,不会进行HTML转义。这意味着如果后端传递的文本内容包含HTML标签,这些标签会被直接渲染为HTML元素,而不是作为纯文本显示。

    • 直接在标签的value前面加上th前缀,也可以取值,例如:

      <input type="text" name="name" **th:value="${name}"**>
      
  3. 获取对象类型

    <h2>获取对象类型:</h2>
    <table border="1" width="500">
        <tr>
            <th>id</th>
            <th>name</th>
            <th>salary</th>
            <th>birthday</th>
        </tr>
        <tr>
            <td th:text="${user.id}"></td>
            <td th:text="${user.name}"></td>
            <td th:text="${user.salary}"></td>
            <!--格式化日期-->
            <td th:text="${#dates.format(user.birthday,'yyyy-MM-dd HH:mm:ss')}"></td>
        </tr>
    </table>
    
  4. 获取集合类型

    通过th:each属性进行遍历,例如**th:each="user:${users}"**

    <h2>获取集合类型:</h2>
    <!--遍历集合:th:each-->
    <table border="1" width="500">
        <tr>
            <th>id</th>
            <th>name</th>
            <th>salary</th>
            <th>birthday</th>
        </tr>
        <tr **th:each="user:${users}"**>
            <td th:text="${user.id}"></td>
            <td th:text="${user.name}"></td>
            <td th:text="${user.salary}"></td>
            <!--格式化日期-->
            <td th:text="${#dates.format(user.birthday,'yyyy-MM-dd HH:mm:ss')}"></td>
        </tr>
    </table>
    

    执行效果:成功获取

    • 通过遍历状态获取信息

      <tr th:each="user,state:${users}">
          <td th:text="计数+${state.count}"></td>
          <td th:text="'判断偶数行:'+${state.odd}"></td>
          <td th:text="'判断奇数行:'+${state.even}"></td>
          <td th:text="'集合长度=:'+${state.size}"></td>
          <td th:text="${user.id}"></td>
          <td th:text="${user.name}"></td>
          <td th:text="${user.salary}"></td>
          <!--格式化日期-->
          <td th:text="${#dates.format(user.birthday,'yyyy-MM-dd HH:mm:ss')}"></td>
      </tr>
      

      执行效果:

  5. 通过th:if有条件展示数据

    <div th:if="${user.role == 'admin'}">
        <p>您是管理员,拥有特殊权限。</p>
    </div>
    <div th:if="${user.role == 'manager'}">
        <p>您是经理,可以管理团队。</p>
    </div>
    <div th:if="${user.role == 'employee'}">
        <p>您是普通员工,完成日常工作。</p>
    </div>
    
  6. 获取session作用域数据,加上session前缀即可

    <h2>获取session作用域中数据:<span th:text="${session.name}"></span></h2>
    
  7. 获取项目名地址

    通过**th:href=”@{/demo.css}”**的方式获取,常用于重定向跳转的时候访问不到css文件的时候,使用根目录路径

    <link rel="stylesheet" th:href="@{/demo.css}">
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题&#xff1a;Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演&#xff08;FWI&#xff09;是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

1.数字反转

题目 AC import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();if(n>0) {StringBuilder str new StringBuilder();str.append(n);StringBuilder str1 str.reverse();String st…

视频号小店无货源怎么做?难不难?一篇文章告诉你答案!

大家好&#xff0c;我是电商糖果 视频号从去年开始做电商&#xff0c;就有朋友问过糖果可以做无货源模式吗&#xff1f; 糖果做无货源电商已经七年了&#xff0c;做过天猫&#xff0c;京东&#xff0c;闲鱼&#xff0c;抖音小店。 根据糖果这些年做电商总结出来的经验&#…

机密计算容器前沿探索与 AI 场景应用

作者&#xff1a;壮怀、朱江云 企业与个人对数据隐私保护日益关切&#xff0c;从数据&#xff0c;网络的可信基础设施扩展到闭环可信的计算基础设施&#xff0c;可信的计算&#xff0c;存储&#xff0c; 网络基础设施必定成为云计算的标配。 机密计算技术应运而生&#xff0c;…

EFCore8分析类图映射到代码和数据库的示例

借用微软EFCore8官方的示例&#xff0c;我画了张类图&#xff1a; blog&#xff08;博客&#xff09;与Post&#xff08;文章&#xff09;是1对多的关系&#xff0c;显式表达出两者间是双向导航&#xff1a;双方都可见。 Post&#xff08;文章&#xff09;与Tag&#xff08;标…

python(上半部分)

第一部分 1、input()语句默认结果是字符串 2、type()可以判断变量的类型 3、input()输出语句 &#xff08;默认为字符串类型&#xff09; 4、命名规则&#xff1a;中文、英文、数字、_&#xff0c;数字不可开头&#xff0c;大小写敏感。 5、 %s&#xff1a;将内容转换成…

Java期末复习题之选择题理论综合

点击返回标题->23年Java期末复习-CSDN博客 选择题考察内容为—— 构造函数的描述&#xff0c;在文件中写入字符而不是字节选用什么类&#xff0c;java源文件import, class定义以及package的顺序&#xff0c;静态成员变量作用域&#xff0c;非抽象子类的接口实现&#xff0c;…

实现打印一个数字金字塔。例如:输入5,图形如下图所示

1*12**123***1234**** 12345*****#include<stdio.h> void main() {int i,j,l,n,k;scanf("%d",&n);/**********Program**********//********** End **********/ } 当我们拿到这个题目的时候可以看见题目给了我们五个变量&#xff0c;其中n是我们输入的数…

Elasticsearch 写入优化探索:是什么影响了refresh 耗时?

1、问题背景&#xff1a; 数据写入后&#xff0c;refresh耗时过长&#xff0c;能达到1s-5s。 想通过测试&#xff0c;探索确认影响refresh的因素&#xff0c;比如&#xff1a;写入操作是新增还是更新&#xff0c;deleted文档占比是否有影响&#xff0c;是否有其他索引配置&…

一、网络ensp安装

一、网络ensp安装https://blog.csdn.net/G_GUi/article/details/135176493 文章目录 一、下载4个软件安装二、工具栏常用图标 一、下载4个软件安装 前面3个软件必须要安装&#xff0c;不然用不了ensp https://pan.baidu.com/s/1kV7cL–BEbgANwSrZJ5t1Q?pwdqqqq 二、工具栏常…

【XML】TinyXML 详解(一):介绍

【C】郭老二博文之&#xff1a;C目录 1、简介 优点&#xff1a; TinyXML 是一个简单、小型的 C XML 解析器&#xff0c;可以轻松集成到项目中。 TinyXML 解析 XML 文档&#xff0c;并根据该文档构建可读取、修改和保存的文档对象模型 (DOM) TinyXML 是在 ZLib 许可下发布的&a…

AI一键注释代码、阅读整个项目、转换编程语言。已开源!

获取github源码地址和国内url、key方式&#xff1a;在文章底部 大家好今天给大家介绍一款开源项目&#xff0c;这个项目是由渡码维护的&#xff0c;这个项目支持自己的大模型和使用openai两种方式&#xff0c;本文章介绍使用openai的方式&#xff01; 使用过程中发现两个问题…

Java 第16章 坦克大战1-2 思路整理

文章目录 1 绘制坦克坦克画板Panel画框Frame 2 让坦克动起来画板Panel 3 本章作业 1 绘制坦克 坦克 不同坦克有共同属性&#xff0c;可以先提取共同特征&#xff08;坐标位置&#xff09;作为父类&#xff0c;然后其他坦克类继承它。 画板Panel 有坦克在画板上显示&#xf…

四. 基于环视Camera的BEV感知算法-PETR

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. PETRv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识&#xff0c;并落实到实际场景&#xff08;增量同步数据搜索&#xff09; 对基础知识不感兴趣的&#xff0c;可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

mysql8.x版本_select语句源码跟踪

总结 源码基于8.0.34版本分析&#xff0c;函数执行流程含义大致如下&#xff1a; do_command 方法从连接中读取命令并执行&#xff0c;调用 dispatch_command 对命令进行分发。dispatch_command 调用 mysql_parse 对命令进行解析&#xff0c;如果遇到一条语句用 ; 分隔多条命…

猫头虎带您探索Go语言的魅力:GoLang程序员必备的第三方库大盘点 ‍ ‍

猫头虎带您探索Go语言的魅力&#xff1a;GoLang程序员必备的第三方库大盘点 ‍ &#x1f680;&#x1f431;‍&#x1f4bb; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#x…

Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析

文章目录 概述心跳检测Code模拟心跳超时正常情况 IdleStateHandler源码分析channelReadchannelActiveinitialize 概述 心跳检测 Netty 的心跳检测机制是一种用于保持网络连接活跃的机制&#xff0c;它通过定期发送和接收特定的消息&#xff08;心跳包&#xff09;来确保客户端…

Java复习二—CH3-Exception 、CH4-I/O

CH3 Java Exception (异常) 3.1 Exception&#xff08;异常&#xff09;和 Error&#xff08;错误&#xff09; 异常能被程序本身可以处理&#xff0c;错误是无法处理 大多数错误与代码编写者执行的操作无关&#xff0c;而表示代码运行时 JVM 出现的问题 异常发生的原因有很…

电子科大软件系统架构设计——软件建模详细设计

文章目录 软件建模详细设计概述软件建模详细设计目标软件建模详细设计原则开闭原则里氏 (Liskov) 替换原则依赖倒置原则接口分离原则单一职责原则最少知识原则&#xff08;迪米特法则&#xff09;高内聚原则松耦合原则可重用原则 软件建模详细设计内容 UML 软件静态结构视图建模…