thymeleaf基本语法

thymeleaf基本语法

  • Spring Boot整合Thymeleaf 模版
    • 依赖
    • 创建模板文件
    • 定义页面
    • 简单表达式
    • Thymeleaf 常用语法
      • 定义局部变量
      • 注释
        • 标准注释
        • 析器级注释
      • 取值
      • 拼接
      • *{…}
      • 内联表达式
        • [[ ]]
        • [( )]
        • th:inline
      • 字面值
        • 文字字面值
        • 数字字面值
        • 布尔字面值
        • 空字面值
        • 字符串连接
        • 字面值替换
        • 算术运算
        • 布尔运算
        • 比较运算
        • 三元运算
        • 二元运算符
      • 使用文本
        • th:text
        • th:utext
      • 设置属性
          • th:attr
        • th:*
        • th:\*-\*
        • th:attrappend & th:attrprepend
        • 布尔属性
      • 条件判断
        • th:if
        • th:unless
        • th:swith
      • switch
      • 循环遍历
        • 各行变色表格
      • URL @{…} 链表表达式
      • 复用代码片段~{...}
      • 基本对象
      • 内嵌对象

Spring Boot整合Thymeleaf 模版

SpringBoot项目默认不是JSP,那如何来实现我们的动态页面呢?SpringBoot推荐模板引擎Thymeleaf。其实JSP也属于一种模板引擎,比较常用的还有freemaker。模板引擎非常多,道理都一样

依赖

<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
dependency>

spirngboot默认配置了Thymeleaf
也可以自己写

spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    mode: HTML
    encoding: UTF-8

如果希望客户端可以直接访问 HTML 资源,将这些资源放置在 static 路径下即可,否则必须通过 Handler 的后台映射才可以访问静态资源。

注意使用时一定别忘了导入命名空间

DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>

body>
html>

创建模板文件

DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<p th:text="${msg}">p>
    
    <p th:text="'提示:'+${msg}">p>
     
    <p> 提示:[[${person.name}]] p>   
    
body>
html>
  • 是引入thymeleaf的命名空间,必须。

  • 可以在原来的任何属性前面加上前缀th:*来表示thymeleaf的定义。data-th-*效果一样。

  • 在标签内拼接字符串比较麻烦,可以在里面通过[[]]来显示跟拼接

定义页面

classpath:templates路径下创建html文件作为显示页面,一定要放在此路径,并且一定要是html格式,比如hello.html

简单表达式

Thymeleaf 提供了非常丰富的标准表达式语法,总共有 8 大类:

  • 简单表达式

  • 字面值

  • 文本操作

  • 算术运算

  • 布尔运算

  • 比较和相等

  • 条件运算

  • 无操作符

语法 名称 描述 作用
${…} Variable Expressions 变量表达式 取出上下文变量的值
*{…} Selection Variable Expressions 选择变量表达式 取出选择的对象的属性值
#{…} Message Expressions 消息表达式 使文字消息国际化,I18N
@{…} Link URL Expressions 链接表达式 用于表示各种超链接地址
~{…} Fragment Expressions 片段表达式 引用一段公共的代码片段

Thymeleaf 常用语法

定义局部变量

使用th:with属性可以定义局部变量

 <span th:with="myName='dyk'">
   <p th:text="${myName}" >p>
span>

同时定义多个局部变量时,用英文,号分隔开

<p th:with="name=${user.name},age={user.age}">
    ......
p>

注释

标准注释
  • 标准注释会在文件源代码中显示出来。

析器级注释
  • 注释的代码块会在引擎解析的时候抹去。

取值

和原来jsp的el表达式类似

package com.blb.springbootmybatis.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ThymeleafController {
    @GetMapping("/test1")
    public ModelAndView test(){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("name","dyk");
        modelAndView.setViewName("test");
        return modelAndView;
    }
}


<div th:text="${name}">div>

拼接

<div th:text="'我的名字是'+${name}+'年龄是'+18">div>

单引号加+号拼接
或者直接双引号里面使用| 拼接的内容 |

<div th:text="|我叫${name}|">div>
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<div th:text="${name}">div>
<div th:text="'我的名字是'+${name}+'年龄是'+18">div>
<div th:text="|我叫${name}|">div>
body>
html>

*{…}

变量表达式${}是面向整个上下文的,而选择变量表达式*{}的上下文是父标签(th:object)所选择的对象。

// Person bean
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Person {

	private String name ;
	private String sex ;
	private Integer age ;

}
// controller
@RequestMapping("/hello")
public String welcome(Model model){
    Person person = new Person("dyk","男",18);
    model.addAttribute("person",person);
    return "hello" ;
}
<span th:object="${person}">
   <p th:text="*{name}">p>
   <p th:text="*{sex}">p>
   <p th:text="*{age}">p>
span>

<span >
    <p th:text="${person.name}">p>
	<p th:text="${person.sex}">p>
    <p th:text="${person.age}">p>
span>

内联表达式

内联表达式允许我们直接在 HTML 文本中使用标准表达式,而不需要使用th:*标签属性

[[ ]]

[[]]相当于th:text,对含有 HTML 标签的内容自动进行字符转义

<p>[[${msg}]]p>
[( )]

[()]相当于th:utext,对含有 HTML 标签的内容不进行字符转义

<p>[(${msg})]</p>
th:inline

我们已经了解到,使用[[]][()]语法可以直接在 HTML 文本中使用标准表达式,如果想要使用更多高级的功能,需要使用th:inline属性来激活,它的取值如下

描述
none 禁止内联表达式,可以原样输出 [[]] 和 [()] 字符串
text 文本内联,可以使用 th:each 等高级语法
css 样式内联,如