标准变量表达式:
注意:
th:text=""
是
Thymeleaf
的一个属性,用于文本的显示
语法
: ${key}
说明:标准变量表达式用于访问容器(tomcat
)上下文环境中的变量,功能和
EL
中的
${}
相
同。
Thymeleaf
中的变量表达式使用
${
变量名
}
的方式获取
Controller
中
model
其中的数据。
也就是
request
作用域中的数据。
选择变量表达式:
语法:
*{key}
说明:需要配和
th:object
一起使用。选择变量表达式,也叫星号变量表达式,使用
th:object
属性来绑定对象,选择表达式首先使用
th:object
来绑定后台传来的对象,然后使用
*
来代表这
个对象,后面
{}
中的值是此对象中的属性。
选择变量表达式
*{...}
是另一种类似于标准变量表达式
${...}
表示变量的方法选择变量表达式在执行时是在选择的对象上求解,而
${...}
是在上下文的变量
model
上求解
链接表达式:
语法:
@{
链接
url}
说明:主要用于链接、地址的展示,可用于<script src="...">
、
<link href="...">
、
<a href="...">
、
<form action="...">
、
<img src="">
等,可以
在
URL
路径中动态获取数据
项目结构
1.pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.it</groupId>
<artifactId>028-thymeleaf-course</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--模板的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.properties核心配置文件
server.port=9001
server.servlet.context-path=/myboot
#在开发阶段,关闭模板缓存,让修改立即生效
spring.thymeleaf.cache=false
#编码格式
spring.thymeleaf.encoding=UTF-8
#模板的类型(默认是html)
spring.thymeleaf.mode=HTML
#模板的前缀:类路径的classpath:/templates/
spring.thymeleaf.prefix=classpath:/templates/
#后缀
spring.thymeleaf.suffix=.html
3.resources/static目录下新建index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index.html</title>
</head>
<body>
<h3>index.html------学习模板thymeleaf的语法</h3>
<a href="tpl/expression1">标准变量表达式</a>
<br/>
<a href="tpl/expression2">选择变量表达式</a>
<br/>
<a href="tpl/link">链接表达式</a>
</body>
</html>
4.新建SysUser实体类
package com.it.entity;
public class SysUser {
private Integer id;
private String name;
private String sex;
private Integer age;
public SysUser() {
}
public SysUser(Integer id, String name, String sex, Integer age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "SysUser{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
5.ThymeleafController类
package com.it.controller;
import com.it.entity.SysUser;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.jws.WebParam;
@Controller
@RequestMapping("/tpl")
public class ThymeleafController {
//标准变量表达式
@GetMapping("/expression1")
public String expression1(Model model){
//添加数据到model
model.addAttribute("site","www.baidu.com");
model.addAttribute("myuser",new SysUser(1001,"小绿","女",22));
//指定视图
return "expression1";
}
//选择变量表达式
@GetMapping("/expression2")
public String expression2(Model model){
//添加数据到model
model.addAttribute("site2","www.bibili.com");
model.addAttribute("myuser2",new SysUser(1002,"小王","男",26));
//指定视图
return "expression2";
}
//链接表达式
@GetMapping("/link")
public String link(Model model){
model.addAttribute("userId",1003);
return "link";
}
//测试链接表达式的地址
@GetMapping("/queryAccount")
@ResponseBody
public String queryAccount(Integer id){
return "queryAccount,参数id="+id;
}
//测试链接表达式有两个参数的地址
@GetMapping("queryUser")
@ResponseBody
public String queryUser(String name,Integer age){
return "queryUser,有两个参数:name="+name+",age="+age;
}
}
6.resources/template目录下新建expression1.html文件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>标准变量表达式</title>
</head>
<body>
<h3>标准变量表达式: ${key}</h3>
<div>
<p th:text="${site}"></p>
<br/>
<p>获取SysUser对象的属性值</p>
<p th:text="${myuser.id}">id</p>
<p th:text="${myuser.name}">name</p>
<p th:text="${myuser.sex}">sex</p>
<p th:text="${myuser.age}">age</p>
</div>
</body>
</html>
resources/template目录下新建expression2.html文件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>选择变量表达式</title>
</head>
<body>
<h3>选择变量表达式: *{key}</h3>
<p>------------------------------------------------------</p>
<p>使用*{}获取SysUser的属性值</p>
<div th:object="${myuser2}">
<p th:text="*{id}">id</p>
<p th:text="*{name}">name</p>
<p th:text="*{sex}">sex</p>
<p th:text="*{age}">age</p>
</div>
</body>
</html>
resources/template目录下新建link.html文件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>链接表达式</title>
</head>
<body>
<h3>链接绝对路径</h3>
<a th:href="@{http://www.baidu.com}">链接到百度</a>
<h3>链接的是相对地址</h3>
<a th:href="@{/tpl/queryAccount}">相对地址,没有参数</a>
<h3>链接的相对地址,使用字符串链接传递参数</h3>
<a th:href="@{'/tpl/queryAccount?id='+${userId}}">获取model中数据</a>
<h3>推荐使用的传参数的方式</h3>
<a th:href="@{/tpl/queryAccount(id=${userId})}">传递一个参数</a>
<a th:href="@{/tpl/queryUser(name='lisi',age='20')}">传递多个参数</a>
</body>
</html>
7.运行主函数入口类ThymeleafApplication,测试项目
点击链接到百度
链接的是相对地址
链接的相对地址,使用字符串链接传递参数
点击传递一个参数
点击传递多个参数