Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP
Thymeleaf 特点:
Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板 + 数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
Thymeleaf 开箱即用的特性。它提供标准和 Spring 标准两种方言,可以直接套用模板实现 JSTL、 OGNL 表达式效果,避免每天套模板、改 JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
Thymeleaf 提供 Spring 标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
Why 使用 Thymeleaf
如果希望以 Jar 形式发布模块则不要使用 JSP 相关知识,这是因为 JSP 在内嵌的 Servlet 容器上运行有一些问题 (内嵌 Tomcat、 Jetty 不支持 Jar 形式运行 JSP,Undertow 不支持 JSP)。
Spring Boot 中推荐使用 Thymeleaf 作为模板引擎,因为 Thymeleaf 提供了完美的 Spring MVC 支持
Spring Boot 提供了大量模板引擎,包括:
FreeMarker
Groovy
Mustache
Thymeleaf
Velocity
Beetl
在 pom.xml 导入依赖
<!--Thymeleaf 模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--Thymeleaf 严格遵循 w3c 规则 引入 nekohtml 后不需要严格遵循 高度容错性-->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
在 application.yml 中配置 Thymeleaf
spring:
thymeleaf:
cache: false # 开发时关闭缓存,不然没法看到实时页面
mode: HTML # 用非严格的 HTML
encoding: UTF-8
servlet:
content-type: text/html
创建html : 在Spring Boot 默认的目录 templates 创建 xx.html ,==Spring -Boot 控制层视图解析器的视图默认在templates目录== (删除页面全部后 html:5 +Tab 键)
每个页面都要修改 html 标签用于引入 thymeleaf 引擎,这样才可以在其他标签里使用 th:* 语法(相当于jsp中的jstl与EL表达式),声明如下:
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
th 标签代替 jsp里面的 Jstl 并且只能在其他标签里使用 th: 比如 p 标签中,使用的话 必须在页面最上面引入
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring4-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
例如: 直接访问页面是11111111 运行程序后动态加载是 作用域中的内容(达到动态页面效果)
<p th:text="${t}">
11111111
</p>
Thymeleaf 常用语法
遍历作用域中的list集合
<!--th:each 遍历 冒号左边变量名,右边遍历的值 th:text 显示变量值-->
<ul>
<li th:each="name: ${list}" th:text="${name}">
列表
</li>
</ul>
if/unless (相当于 if else)
Thymeleaf 中使用 th:if 和 th:unless 属性进行条件判断,下面的例子中,标签只有在 th:if 中条件成立时才显示
<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
<li><a th:href="@{/toPersonmyquestion(id=${session.SessionUser.id})}">我的提问</a></li>
<div class="alert alert-danger" th:classappend="${message==null? 'display-hide ':''}">
<button class="close" data-close="alert"></button>
<span th:text="${message!=null? message:'请输入用户与密码'}">请输入用户与密码</span>
</div>
网友评论