乐趣区

Thymeleaf

4.2 Thymeleaf

​ Thymeleaf 是一种现代的基于服务器端的 Java 模板引擎技术,也是一个优秀的面向 Java 的 XML、XHTML、HTML5 页面模板,它具有丰富的标签语言、函数和表达式,在使用 Spring Boot 框架进行页面设计时,一般会选择 Thymeleaf 模板

4.2.1 Thymeleaf 语法

常用标签

在 HTML 页面上使用 Thymeleaf 标签,Thymeleaf 标签能够动态地替换掉静态内容,使页面动态展示。

为了大家更直观的认识 Thymeleaf,下面展示一个在 HTML 文件中嵌入了 Thymeleaf 的页面文件,示例代码如下:

html

<!DOCTYPE html>

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

<head>

<meta charset=”UTF-8″>

<link rel=”stylesheet” type=”text/css” media=”all”

href=”../../css/gtvg.css” th:href=”@{/css/gtvg.css}” />

<title>Title</title>

</head>

<body>

<p th:text=”${hello}”> 欢迎进入 Thymeleaf 的学习 </p>

</body>

</html>

​ 上述代码中,“xmlns:th=”http://www.thymeleaf.org”“用于引入 Thymeleaf 模板引擎标签,使用关键字“th”标注标签是 Thymeleaf 模板提供的标签,其中,“th:href”用于引入外联样式文件,“th:text”用于动态显示标签文本内容。

除此之外,Thymeleaf 模板提供了很多标签,接下来,通过一张表罗列 Thymeleaf 的常用标签

| th:标签 | 说明 |

| th:insert | 布局标签,替换内容到引入的文件 |

| th:replace | 页面片段包含(类似 JSP 中的 include 标签)|

| th:each | 元素遍历(类似 JSP 中的 c:forEach 标签)|

| th:if | 条件判断,如果为真 |

| th:unless | 条件判断,如果为假 |

| th:switch | 条件判断,进行选择性匹配 |

| th:case | 条件判断,进行选择性匹配 |

| th:value | 属性值修改,指定标签属性值 |

| th:href | 用于设定链接地址 |

| th:src | 用于设定链接地址 |

| th:text | 用于指定标签显示的文本内容 |

标准表达式

​ Thymeleaf 模板引擎提供了多种标准表达式语法,在正式学习之前,先通过一张表来展示其主要语法及说明

| 说明 | 表达式语法 |

| 变量表达式 | ${…} |

| 选择变量表达式 | *{…} |

| 消息表达式 | \#{…} |

| 链接 URL 表达式 | @{…} |

| 片段表达式 | ~{…} |

1.变量表达式 ${…}**

​ 变量表达式 ${…}主要用于获取上下文中的变量值,示例代码如下:

html

<p th:text=”${title}”> 这是标题 </p>

示例使用了 Thymeleaf 模板的变量表达式 ${…}用来动态获取 P 标签中的内容,如果当前程序没有启动或者当前上下文中不存在 title 变量,该片段会显示标签默认值“这是标题”;如果当前上下文中存在 title 变量并且程序已经启动,当前 P 标签中的默认文本内容将会被 title 变量的值所替换,从而达到模板引擎页面数据动态替换的效果

同时,Thymeleaf 为变量所在域提供了一些内置对象,具体如下所示

# ctx:上下文对象

# vars:上下文变量

# locale:上下文区域设置

# request:(仅限 Web Context)HttpServletRequest 对象

# response:(仅限 Web Context)HttpServletResponse 对象

# session:(仅限 Web Context)HttpSession 对象

# servletContext:(仅限 Web Context)ServletContext 对象

​ 结合上述内置对象的说明,假设要在 Thymeleaf 模板引擎页面中动态获取当前国家信息,可以使用 #locale 内置对象,示例代码如下

html

The locale country is: <span th:text=”${#locale.country}”>US</span>.

​ 上述代码中,使用 th:text=”${#locale.country}” 动态获取当前用户所在国家信息,其中 <span> 标签内默认内容为 US(美国),程序启动后通过浏览器查看当前页面时,Thymeleaf 会通过浏览器语言设置来识别当前用户所在国家信息,从而实现动态替换

2.选择变量表达式 {…}

​ 选择变量表达式和变量表达式用法类似,一般用于从被选定对象而不是上下文中获取属性值,如果没有选定对象,则和变量表达式一样,示例代码如下

html

<div th:object=”${book}”>

<p>titile: <span th:text=”*{title}”> 标题 </span>.</p>

</div>

{title} 选择变量表达式获取当前指定对象 book 的 title 属性值。

3.消息表达式 #{…}

​ 消息表达式 #{…}主要用于 Thymeleaf 模板页面国际化内容的动态替换和展示,使用消息表达式#{…}进行国际化设置时,还需要提供一些国际化配置文件。关于消息表达式的使用,后续会详细说明

4.链接表达式 @{…}

链接表达式 @{…}一般用于页面跳转或者资源的引入,在 Web 开发中占据着非常重要的地位,并且使用也非常频繁,示例代码如下:

html

view

view

​ 上述代码中,链接表达式 @{…}分别编写了绝对链接地址和相对链接地址。在有参表达式中,需要按照 @{路径 (参数名称 = 参数值,参数名称 = 参数值 …)} 的形式编写,同时该参数的值可以使用变量表达式来传递动态参数值

5.片段表达式 ~{…}

片段表达式~{…}用来标记一个片段模板,并根据需要移动或传递给其他模板。其中,最常见的用法是使用 th:insert 或 th:replace 属性插入片段,示例代码如下:

html

<div th:insert=”~{thymeleafDemo::title}”></div>

​ 上述代码中,使用 th:insert 属性将 title 片段模板引用到该 <div> 标签中。thymeleafDemo 为模板名称,Thymeleaf 会自动查找“/resources/templates/”目录下的 thymeleafDemo 模板,title 为片段名称

刚学了拉勾教育的《Java 工程师高薪训练营》,看到刚学到的点就回答了。希望拉勾能给我推到想去的公司,目标:字节!!

退出移动版