学科分类
目录
Spring Boot开发

标准表达式

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

表1 Thymeleaf主要标准表达式语法

说明 表达式语法
变量表达式 ${...}
选择变量表达式 *{...}
消息表达式 #{...}
链接URL表达式 @{...}
片段表达式 ~{...}

在表1中,列举了Thymeleaf模板引擎最常用的简单表达式语法,并对这些语法进行了功能说明。除此之外,Thymeleaf还提供了其他更多的语法支持,例如文本表达式、算术运算表达式、布尔操作表达式、比较表达式等,在使用过程中可以查看具体的官方文档说明。下面,对上表中一些常用的表达式进行具体讲解和使用说明。

1.变量表达式

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

<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内置对象,示例代码如下:

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

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

2.选择变量表达式

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

<div th:object="${session.user}">
  <p>Name: <span th:text="${#object.firstName}">Sebastian</span>.</p>
  <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
  <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
</div>

上述代码中,${#object.firstName}变量表达式使用Thymeleaf模板提供的内置对象object获取当前上下文对象中的firstName属性值;

${session.user.lastName}变量表达式获取当前user对象的lastName属性值;

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

3.消息表达式

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

4.链接表达式

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

<a href="details.html" 
   th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>

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

5.片段表达式

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

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

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

至此,关于Thymeleaf模板引擎的基本使用已经讲解完毕。由于篇幅有限,并且本章重点讲解Spring Boot与Thymeleaf的整合使用,因此,本节只是对Thymeleaf的基本语法进行了讲解,关于Thymeleaf更多内容,有兴趣的读者可以自行查看学习。

点击此处
隐藏目录