Thymeleaf简介
前两天学习springboot遇到了thymeleaf,本着不懂就学的原则,网上查资料了解了以下,整理了一些网上的大家整理的资料,做一下记录。
Thymeleaf(读音)是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。以上内容引用至这位大神的博客
示例模板(摘自官网):
Good Thymes Virtual Grocery
Welcome to our grocery store!
Thymeleaf的优势
摘至https://blog.csdn.net/u011244202/article/details/54605165
- Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。(当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。)
- Thymeleaf 开箱即用的特性。(它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果。)
- Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
另外,Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
SpringBoot引用Thymeleaf
- 引入下面的依赖
org.springframework.boot
spring-boot-starter-thymeleaf
- control层代码
package com.banana.sprintbootday1.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/demo2")
public String demo1(Model map) {
map.addAttribute("MyName","Fanco");
return "index";
}
}
- index.html
Title
Hello World
直接打开页面的话显示的是helloworld,如果启动项目访问的话,显示MyName的值。
Thymeleaf 的配置
thymeleaf可以在项目的application.properties中进行配置
# 是否开启模板缓存,默认true
spring.thymeleaf.cache=true
# 检查模板位置是否存在
spring.thymeleaf.check-template-location=true
# Content-Type value
spring.thymeleaf.content-type=text/html
# 是否启用MVC-Thymeleaf视图
spring.thymeleaf.enabled=true
# 模板编码
spring.thymeleaf.encoding=UTF-8
# 应该从解析中排除的视图名称列表(用逗号分隔)
spring.thymeleaf.excluded-view-names=
# 要应用于模板的模板模式。另请参见StandardTemplateModeHandlers。
spring.thymeleaf.mode=HTML5
# 在链接网址时预先查看名称的前缀。
spring.thymeleaf.prefix=classpath:/templates/
# 链接网址时附加到视图名称的后缀。
spring.thymeleaf.suffix=.html
# 指定模板的解析顺序,默认为第一个.
spring.thymeleaf.template-resolver-order=
# 指定使用模板的视图名,多个以逗号分隔
spring.thymeleaf.view-names=
Thymeleaf的用法
文本、字面值和国际化文本
文本
文本需要th:text属性来设置。我们可以在文本元素中添加默认值,这样当Thymeleaf引擎处理失败的时候页面会显示默认值。${...}是变量表达式,将括号中的变量替换为其值。
你好
字面值
在th:text中我们可以使用各种字面值,下面列举如下。
- 字符串字面值。如果需要连接多个字符串使用+即可。
默认值
- 数字字面量。我们可以使用运算符计算数字的值。
2017
- 布尔值字面量。
国际化文本
默认情况下,我们可以在与视图文件相同的目录下编写properties文件,然后使用消息语法#{home.welcome}来引用文件中的字符串。可以有多个属性文件,对应不同的区域,例如home_en.properties代表英文区域,home_es.properties代表西班牙区域。下面是一个示例属性文件。
home.welcome=你好
默认情况下Thymeleaf会在与视图相同的文件下寻找同名的属性文件来加载消息。我们也可以自定义消息解析器,用自己的策略从任何地方加载消息。
内插字符串
内插字符串可以将一个字符串中给定部分替换为实际的字符串,内插字符串使用|包括,在|中只能包括${}表达式,不能包括其他表达式
算术、比较和逻辑运算
thymeleaf支持常用的算术运算,如果使用除/或者取余%运算符的话,还可以使用div或mod代替。
对于比较和逻辑运算符使用gt(>),ge(>=),le(<=),not(!),eq(==),neq/ne(!=)
条件表达式
无操作标记
不进行任何操作
选择表达式(星号语法)
星号表达式和美元表达式的作用都是求变量的值。不过它们之间有一些区别,星号表达式作用于被选择的对象。被选择的对象需要使用th:object指定。下面是Thymeleaf的一个例子。
Name: Sebastian.
Surname: Pepper.
Nationality: Saturn.
等效于使用${..}。
Name: Sebastian.
Surname: Pepper.
Nationality: Saturn.
当存在选择对象的时候,我们可以使用美元表达式${#object}来访问选择对象,也可以同时使用星号表达式和美元表达式。选择表达式的主要作用是在表达式比较长例如${session.users.address.street.fullname}的时候,简化表达式。
选择块
条件选择块
在开发Web程序的时候, 很常见的需求就是根据某个值的真假,显示或隐藏某个HTML元素。这可以使用th:if="${exp}"
实现。需要注意和JSTL中的
不同,Thymeleaf会根据条件显示或隐藏包含th:if
的整个标签块,而不仅是它的子标签块。
....
需要注意th:if
的表达式不仅支持Java式的纯条件判断,还支持C语言式的真值判断,即当一个变量不为空或者整数不是0的时候,也认为是真值。另外还有一个th:unless
执行和th:if
相反的判断。
多重选择块
如果需要多重选择,可以使用th:switch
。需要注意一旦有一个子条件匹配,Thymeleaf就不会继续检查其他条件了。如果需要提供默认值的话,可以这样写,th:case="*"
。
这是1
这是2
其他值
迭代块
有时候我们需要遍历一个数组中的元素。这可以使用th:each
实现。在th:each
中我们要指定迭代元素和被迭代集合。被迭代集合可以是:数组,任何实现了java.util.Iterable
的对象,任何实现了java.util.Enumeration
的对象,任何实现了java.util.Iterator
的对象,任何实现了java.util.Map
的对象。需要注意的是,和JSTL的
标签不同,Thymeleaf会迭代包含
的整个标签块,而不仅仅是它的子标签块。
Thymeleaf还提供了迭代状态变量来检测当前迭代的状态,只需要在th:each
中声明iterStat
即可。假如没有显式声明状态变量,Thymeleaf也会创建一个状态变量,名称是迭代元素添加后缀Stat
。上面的代码中,Thymeleaf会创建一个名为userStat
的状态变量。
状态变量包含以下属性;
- index属性,以0开始的迭代元素索引。
- count属性,以1开始的迭代元素索引。
- size属性,迭代集合的总元素数。
- iter属性,当前迭代元素。
- even和odd两个布尔值,表明当前index的奇偶。
- first和last两个布尔值,表明当前元素是否是第一个/最后一个。
删除代码段
以下是Thymeleaf的一个例子。我们可以使用th:remove来删除指定的部分,这在原型设计和调试的时候很有用。
Mild Cinnamon
1.99
yes
3 comment/s
view
th:remove可接受的值有5个:
- all: 移除标签和所有子元素
- body: 移除所有子元素,保留标签
- tag: 移除标签,保留子元素
- all-but-first: 保留第一个子元素,移除所有其他
- none : 什么也不做。这个值在动态求值的时候会有作用
以下内容来自于https://blog.csdn.net/u011054333/article/details/55260754,我只记录了比较常用的,要知道更多可以去这看,或者看官方文档。
更多详细内容建议参考官方文档https://www.thymeleaf.org/documentation.html