Thymeleaf
简单介绍
Thymeleaf是一个模板引擎,采用Java开发。
Thymeleaf对网络环境要求不严格,既能用于Web环境,也能用于非Web环境。在非Web环境(即不开启服务器,只打开该文件)下,可以直接显示模板的静态数据;在Web环境下,可以像JSP一样从后台接受数据,并替换掉模板的静态数据,它是基于HTML的,以HTML为载体,Thymeleaf要寄托在HTML标签下才可以实现。
SpringBoot集成了Thymeleaf技术,SpringBoot官方也推荐使用Thymeleaf来代替JSP技术。但它本身并不属于SpringBoot。
该模板文件可以直接在任何浏览器内正确显示,浏览器会自动忽略不能理解的属性。但是这并不是一个真正有效的HTML5文档,因为HTML5文档没有th:*
这些非标准属性的。需要Thymeleaf解析后才会变成一个标准的HTML文档。
Thymeleaf的简单使用
首先要加入Thymeleaf的起步依赖,可以在创建SpringBoot项目时就直接添加该依赖。
1 |
|
然后创建html文件,并且需要在文件中添加:
1 |
|
即html文件变成:
1 |
|
并且默认将该模板文件放在resources/templates目录中,将其他静态资源文件如js,css,图片等放在resources/static目录中。
Thymeleaf基础语法
所有有关Thymeleaf的属性开头都是th:*
,*
代表任意属性。有些浏览器不支持该写法。也可以使用data-th-*
来代替th:*
语法。
显示文本
使用th:text
和th:utext
来显示数据。
两者不同是:
th:text
属性不解析html元素,传来什么数据就显示什么数据。
th:utext
属性将解析HTML元素。如传来的数据是<p>一个段落</p>
,那么该属性会识别到
是一个html标签,进行解析。
简单表达式
语法 | 描述 | 作用 |
---|---|---|
${..} | 变量表达式 | 取出上下文变量的值 |
*{..} | 选择变量表达式 | 取出选择的对象的属性值 |
#{..} | 消息表达式 | 能够从外部源(.properties文件)获得属性值,一般用于国际化消息 |
@{..} | 链接表达式 | 用于表示各种超链接地址 |
~{..} | 片段表达式 | 引用一段公共的代码片段 |
变量表达式
语法:${变量名}
说明:标准变量表达式用于访问容器上下文环境的变量。Thymeleaf使用变量表达式来获取Controller传过来的Model中的数据。
可以是简单变量String,Integer,这时候直接使用变量名即可。
也可以是引用变量,这时候要使用${变量名.属性名}的方式。
${..}
的作用域是面向整个上下文。
一个例子:
控制器方法:
1 |
|
html文件:
1 |
|
运行结果:
选择变量表达式
不推荐使用。
语法:*{…}
说明:也叫星号变量表达式。使用th:object
属性来绑定对象。
然后使用*
来代表这个对象,*
后面的{}
中的值时此对象的属性。
选择变量表达式*{..}
类似于标准变量表达式${..}
表示变量的写法。
选择变量表达式是在执行时在选择的对象上求解,而标准变量表达式是在上下文的Model上求解。
这种写法比较繁琐,不推荐使用。
选择变量表达式*{..}
的作用域是父标签th:object
。
例子:
控制器方法不用改,html文件改为:
1 |
|
也可以不使用th:object
绑定对象,直接使用*{变量名.属性名}
,和${}
用法一样。
消息表达式
消息表达式#{..}
用于国际化文字信息,也就是根据语言改变显示文字,.properteis
文件命名规则一般是:
basename.properties
basename_language.properties
basename_language_country.properties
其中:basename是自定义的资源文件名称,language和country是Java支持的语言和国家。如中国中文是messages_zn_CN.properties
。
basename.properties
是缺省加载的资源文件,当客户端根据本地语言查找不到相关资源文件,则使用该配置文件。
资源文件应该放在resources目录中。
SpringBoot加载资源文件的默认名称是messages。并且默认放在resources目录中。如果放在其他目录或者名称不是messages,那么在application.properties
中修改spring.messages.basename
属性来修改。如放在resources/i18n目录中,basename是message,那么属性应变为spring.messages.basebame=i18n/message
。
一个例子
创建一个资源文件文件名为messages_zn_CH.properties
:
1 |
|
在html文件中:
1 |
|
这样就可以调用到属性值。
使用占位符
消息表达式#{..}
不允许直接处理静态文本消息,例如调用变量。但是可以在资源文件中使用占位符{}
来处理费静态文本消息:
资源文件配置:
1 |
|
然后在html中以参数形式传递变量:
1 |
|
如果一个属性中有多个占位符,如encoding={0} {1}
,那么在参数传递时,使用逗号,
来分割不同参数。
即:`<span th:text="#{encoding(‘字符编码是:’,$