thymeleaf是一个的java的模板引擎,能用来解析html,css.xml和纯文本。它是spring boot推荐使用的作为jsp的代替品,它比jsp更快,在没有被解析的情况下,仍然可以作为html文件展示。
引入相关依赖
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
UTF-8
3.0.10.RELEASE
2.0.0
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-thymeleaf
由于spring-boot支持自动装配,再引入依赖后,会自动配置需要thymeleaf相关的bean。
propeties自动装配属性配置
spring.thymeleaf.cache=false # 是否开启缓存,开发中设置成false,便于更改文件后,自动刷新
spring.thymeleaf.check-template=true # 检查模板是否存在
spring.thymeleaf.enabled=true # 是否启用thymeleaf作为视图解析
spring.thymeleaf.enable-spring-el-compiler=false # 是否spring el 表达式
spring.thymeleaf.encoding=UTF-8 # 模板文件编码
spring.thymeleaf.excluded-view-names= # 指定不解析的视图名以逗号分隔,
spring.thymeleaf.mode=HTML # 解析的模板类型
spring.thymeleaf.prefix=classpath:/templates/ # 模板文件路径前缀
spring.thymeleaf.servlet.content-type=text/html # 输出类型
spring.thymeleaf.suffix=.html # 文件后缀
#使用在thymeleaf使用消息表达式语法时#{xx},需指定文件名
spring.messages.basename=application
以上属性spring boot都有默认值
我们将模板放置于classpath:/templates/下
在html标签中加入如下thymeleaf的命名空间,模板才能解析
如果不加这个声明,下面所有的th:*标签,都要加上data前缀才能被解析。
使用文本 th:text
th:text的内容会将原来的内容替换掉
hello
hello
hello
单引号之间都是纯文本,||之间表示格式话文本内容,可以配合$,#符号,而无需是用+号拼接字符串
信息表达式
使用#{xx},xx表示properties文件中的属性。
模板中要用到的属性需要在application.properties文件中指定配置的文件名。
spring.messages.basename=application
属性还能动态添加参数
可以配合$使用。
和el表达式用法相似,
下面几个是获取变量scope的对象
#ctx: the context object.
#vars: the context variables.
#locale: the context locale.
#request: (only in Web Contexts) the HttpServletRequest object.
#response: (only in Web Contexts) the HttpServletResponse object.
#session: (only in Web Contexts) the HttpSession object.
#servletContext: (only in Web Contexts) the ServletContext object.
具体用法如下
@RequestMapping("/hello/thymeleaf")
public String index(Integer id,ModelMap map,HttpSession session,HttpServletRequest request) {
int[] arr = {1,2,3};
map.addAttribute("arr",arr);
map.addAttribute("name","ly");
map.addAttribute("host", "http://blog.didispace.com");
session.setAttribute("student",new Student("ly",24));
//map.addAttribute("title","在学习spring boot");
return "index";
}
*{xx}需配合th:object标签使用
效果等同于
*表达式会根据名称去th:object的对象中匹配值,不会搜索整个上下文。
为a标签特别定制的语法表达式,th:href="@{url(param=xx)}" 括号内带参数,也支持上述语法。
url路径分绝对路径和相对路径
Page-relative: user/login.html(页面相对路径)
Context-relative: /itemdetails?id=3 (上下文相对路径)
Server-relative: ~/billing/processInvoice (服务器相对路径
Protocol-relative URLs: //code.jquery.com/jquery-2.0.3.min.js(协议相对路径)
click
th:if用来执行判断表达式
1!=1
跟jsp的foreach很相似,
更多详细用法参照文档
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#iteration