前言:
最近在写一个SpringBoot的博客系统,使用的是Thymeleaf模板,所以大致学习了一下其一些常用的点,这里记录一下,以后会不断补充。
参考自:https://www.cnblogs.com/msi-chen/p/10974009.html
自动配置
自动给我们默认分配了模版的前缀和后缀,我们只需要按部就班的将模版丢进去即可
如果需要修改自动配置的前后缀,可以在配置文件中如(application.properties或application.yml)修改,如果使用application.properties,那么直接使用自动配置类中的prefix加要修改的属性值修改即可,如spring.thymeleaf.DEFAULT_PREFIX=classpath:/static
常用语法
变量
Thymeleaf通过${}来获取model中的变量,注意这不是el表达式,而是ognl表达式,但是语法非常像。
示例:
控制器:
@GetMapping("/test")
public String test(Model model) {
// 这里我模仿从数据库中取到的type用作示例
Type type = new Type();
type.setTypeName = "Java";
model.addAttribute("type",type);
return "demo";
}
前台部分demo.html:
...
<!--感觉跟el表达式差不多的。区别在于,我们的表达式写在一个名为:th:text的标签属性中,这个叫做指令-->
<div class="item" th:text="${type.typeName}">错误日志</div>
...
这里我省略了很多无关紧要的,然后这个div中显示的就是我控制器中加入model的数据type的typeName了。
这里讲下指令吧:
Thymeleaf崇尚模板是纯正的html代码,脱离模板引擎,在纯静态环境也可以直接运行。现在如果我们直接在html中编写 ${}这样的表达式,显然在静态环境下就会出错,这不符合Thymeleaf的理念。
Thymeleaf中所有的表达式都需要写在"指令"中,指令是HTML5中的自定义属性,在Thymeleaf中所有指令都是以th:开头。因为表达式${user.name}是写在自定义属性中,因此在静态环境下,表达式的内容会被当做是普通字符串,浏览器会自动忽略这些指令,这样就不会报错了。
如果我们不经过SpringMVC,而是直接用浏览器打开编写的页面:在静态环境下,th指令不会被识别,但是也不会报错,而是显示div标签的缺省默认值:“错误日志”
指令的设计,正是Thymeleaf的高明之处,也是它优于其它模板引擎的原因。动静结合的设计,使得无论是前端开发人员还是后端开发人员可以完美契合。
另外,th:text指令出于安全考虑,会把表达式读取到的值进行处理,防止html的注入。
例如,<p>你好</p>
将会被格式化输出为 l t ; p lt;p lt;pgt;你好 l t ; / p lt;/p lt;/plt;。
如果想要不进行格式化输出,而是要输出原始内容,则使用th:utext来代替。
变量的语法糖
刚才获取变量值,我们使用的是经典的对象.属性名方式。但有些情况下,我们的属性名可能本身也是变量,怎么办?
ognl提供了类似js的语法方式:
例如:${user.name} 可以写作${user['name']}
接下来讲的是自定义变量:
先看原始示例:
<h2>
<p>Name: <span th:text="${user.name}">Jack</span>.</p>
<p>Age: <span th:text="${user.age}">21</span>.</p>
<p>friend: <span th:text="${user.friend.name}">Rose</span>.</p>
</h2>
是不是觉得比较麻烦,对于这种都是来自一个变量的属性,有另一种简便的方法:
<h2 th:object="${user}">
<p>Name: