作者:yizhiwazi

学习目标快速节制Thymeleaf的基本利用(五大根本语法+常用内置工具)利用教程

温馨提示:Thymeleaf 最为显著的特色是增强属性,任何属性都可以通过th:xx 来完成交互,例如th:value终极会覆盖value属性。

一、根本语法

jsp迭代器的使用方法SpringBoot Thymeleaf应用教程适用版 Vue.js

变量表达式 ${}

利用方法:直策应用th:xx = \公众${}\"大众 获取工具属性 。
例如:

<form id=\公众userForm\"大众> <input id=\公众id\"大众 name=\公众id\"大众 th:value=\"大众${user.id}\"大众/> <input id=\"大众username\公众 name=\公众username\"大众 th:value=\公众${user.username}\"大众/> <input id=\"大众password\公众 name=\"大众password\"大众 th:value=\公众${user.password}\"大众/></form><div th:text=\"大众hello\公众></div><div th:text=\"大众${user.username}\"大众></div>

选择变量表达式 {}

利用方法:首先通过th:object 获取工具,然后利用th:xx = \"大众{}\"大众获取工具属性。

这种简写风格极为清爽,推举大家在实际项目中利用。
例如:

<form id=\"大众userForm\"大众 th:object=\"大众${user}\"大众> <input id=\公众id\公众 name=\"大众id\"大众 th:value=\"大众{id}\"大众/> <input id=\公众username\"大众 name=\公众username\公众 th:value=\"大众{username}\公众/> <input id=\公众password\"大众 name=\"大众password\"大众 th:value=\"大众{password}\"大众/></form>

链接表达式 @{}

利用方法:通过链接表达式@{}直接拿到运用路径,然后拼接静态资源路径。
例如:

<script th:src=\"大众@{/webjars/jquery/jquery.js}\"大众></script><link th:href=\"大众@{/webjars/bootstrap/css/bootstrap.css}\"大众 rel=\公众stylesheet\公众 type=\"大众text/css\"大众>

片段表达式 ~{}

片段表达式是Thymeleaf的特色之一,细粒度可以达到标签级别,这是JSP无法做到的。

片段表达式拥有三种语法:

~{ viewName } 表示引入完全页面~{ viewName ::selector} 表示在指定页面探求片段 个中selector可为片段名、jquery选择器等~{ ::selector} 表示在当前页探求

利用方法:首先通过th:fragment定制片段 ,然后通过th:replace 填写片段路径和片段名。
例如:

<!-- /views/common/head.html--><head th:fragment=\"大众static\"大众> <script th:src=\"大众@{/webjars/jquery/3.3.1/jquery.js}\"大众></script></head><!-- /views/your.html --><div th:replace=\公众~{common/head::static}\"大众></div>

在实际利用中,我们每每利用更简洁的表达,去掉表达式外壳直接填写片段名。
例如:

<!-- your.html --><div th:replace=\"大众common/head::static\公众></div>

值得把稳的是,利用更换路径th:replace 开头请勿添加斜杠,避免支配运行的时候涌现路径报错。
(由于默认拼接的路径为spring.thymeleaf.prefix = classpath:/templates/)

表达式

即常日的国际化属性:#{msg} 用于获取国际化措辞翻译值。
例如:

<title th:text=\"大众#{user.title}\"大众></title>

其它表达式

在根本语法中,默认支持字符串连接、数学运算、布尔逻辑和三目运算等。
例如:

<input name=\"大众name\"大众 th:value=\"大众${'I am '+(user.name!=null?user.name:'NoBody')}\"大众/>

二、内置工具

官方文档: 附录A: Thymeleaf 3.0 根本工具

官方文档: 附录B: Thymeleaf 3.0 工具类

七大根本工具:

${#ctx} 高下文工具,可用于获取其它内置工具。
${#vars}: 高下文变量。
${#locale}:高下文区域设置。
${#request}: HttpServletRequest工具。
${#response}: HttpServletResponse工具。
${#session}: HttpSession工具。
${#servletContext}: ServletContext工具。

常用的工具类:

#strings:字符串工具类#lists:List 工具类#arrays:数组工具类#sets:Set 工具类#maps:常用Map方法。
#objects:一样平常工具类,常日用来判断非空#bools:常用的布尔方法。
#execInfo:获取页面模板的处理信息。
#messages:在变量表达式中获取外部的方法,与利用#{...}语法获取的方法相同。
#uris:转义部分URL / URI的方法。
#conversions:用于实行已配置的转换做事的方法。
#dates:韶光操作和韶光格式化等。
#calendars:用于更繁芜韶光的格式化。
#numbers:格式化数字工具的方法。
#aggregates:在数组或凑集上创建聚合的方法。
#ids:处理可能重复的id属性的方法。

三、迭代循环

想要遍历List凑集很大略,合营th:each 即可快速完成迭代。
例如遍历用户列表:

<div th:each=\"大众user:${userList}\公众> 账号:<input th:value=\公众${user.username}\"大众/> 密码:<input th:value=\公众${user.password}\"大众/></div>

在凑集的迭代过程还可以获取状态变量,只需在变量后面指定状态变量名即可,状态变量可用于获取凑集的下标/序号、总数、是否为单数/偶数行、是否为第一个/末了一个。
例如:

<div th:each=\"大众user,stat:${userList}\公众 th:class=\公众${stat.even}?'even':'odd'\"大众> 下标:<input th:value=\公众${stat.index}\公众/> 序号:<input th:value=\"大众${stat.count}\"大众/> 账号:<input th:value=\"大众${user.username}\"大众/> 密码:<input th:value=\"大众${user.password}\"大众/></div>

如果缺省状态变量名,则迭代器会默认帮我们天生以变量名开头的状态变量 xxStat, 例如:

<div th:each=\"大众user:${userList}\"大众 th:class=\公众${userStat.even}?'even':'odd'\公众> 下标:<input th:value=\"大众${userStat.index}\"大众/> 序号:<input th:value=\"大众${userStat.count}\"大众/> 账号:<input th:value=\公众${user.username}\"大众/> 密码:<input th:value=\公众${user.password}\"大众/></div>

四、条件判断

条件判断常日用于动态页面的初始化,例如:

<div th:if=\"大众${userList}\"大众> <div>的确存在..</div></div>

如果想取反则利用unless 例如:

<div th:unless=\"大众${userList}\"大众> <div>不存在..</div></div>

五、日期格式化

利用默认的日期格式(toString方法) 并不是我们预期的格式:Mon Dec 03 23:16:50 CST 2018

<input type=\"大众text\公众 th:value=\公众${user.createTime}\"大众/>

此时可以通过韶光工具类#dates来对日期进行格式化:2018-12-03 23:16:50

<input type=\"大众text\公众 th:value=\"大众${#dates.format(user.createTime,'yyyy-MM-dd HH:mm:ss')}\"大众/>

六、内联写法

(1)为什么要利用内联写法?·答:由于 JS无法获取做事端返回的变量。
(2)如何利用内联表达式?答:标准格式为:[[${xx}]] ,可以读取做事端变量,也可以调用内置工具的方法。
例如获取用户变量和运用路径:

<script th:inline=\"大众javascript\"大众> var user = [[${user}]];` var APP_PATH = [[${#request.getContextPath()}]]; var LANG_COUNTRY = [[${#locale.getLanguage()+'_'+#locale.getCountry()}]]; </script>(3)标签引入的JS里面能利用内联表达式吗?答:不能!
内联表达式仅在页面生效,由于Thymeleaf只卖力解析一级视图,不能识别外部标签JS里面的表达式。

七、国际化

须要理解更多关于国际化的精彩描述请前往 SpringBoot 快速实现国际化i18n 。

例如在国际化文件中编写了user.title这个键值,然后利用#{}读取这个KEY即可获取翻译。

<title th:text=\公众#{user.title}\"大众>用户上岸</title>

八、详细教程

======== 有了上述根本后 下面正式开始Thymeleaf 的详细教程 ==============

首先通过Spring Initializr创建项目,如图所示:

然后在POM文件引入web 、thymeleaf等依赖:

<dependencies> <dependency><!--Web干系依赖--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><!--页面模板依赖--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency><!--热支配依赖--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> </dependencies>

然后在src/main/resources/application.yml 配置页面路径:

spring: thymeleaf: cache: false #关闭缓存 prefix: classpath:/views/ #调度页面路径

接着在src/main/java/com/hehe/web/UserController 获取用户信息:

@RestControllerpublic class UserController { private List<User> userList = new ArrayList<>(); { userList.add(new User(\公众1\"大众, \"大众socks\"大众, \公众123456\"大众, new Date())); userList.add(new User(\"大众2\公众, \公众admin\公众, \公众111111\公众, new Date())); userList.add(new User(\公众3\"大众, \"大众jacks\"大众, \"大众222222\"大众, null)); } @GetMapping(\公众/\"大众) public ModelAndView index() { return new ModelAndView(\公众user/user\"大众, \"大众userList\"大众, userList); }}public class User { private String id; private String username; private String password; private Date createTime; //请读者自行补充 布局器和 get/set方法..}

开始编写公共页面:src/main/resources/views/common/head.html ,个中static为页面片段:

<!DOCTYPE html><html xmlns:th=\"大众http://www.thymeleaf.org\公众><!--声明static为页面片段名称--><head th:fragment=\"大众static\公众> <link th:href=\"大众@{/webjars/bootstrap/css/bootstrap.css}\公众 rel=\公众stylesheet\公众 type=\"大众text/css\公众/> <script th:src=\"大众@{/webjars/jquery/jquery.js}\公众></script></head></html>

接着编写用户列表页:src/main/resources/views/user/user.html 合营th:each显示用户列表信息。

利用解释:这里 th:replace=\"大众common/head::static\公众 表示将引用${spring.thymeleaf.prefix}/common/head.html的static页面片段,值得把稳的是由于更换路径默认会拼接前缀路径,以是开头切勿在添加斜杠,否则在打包成JAR支配运行时将提示报Templates not found... 。

<!DOCTYPE html><html xmlns:th=\"大众http://www.thymeleaf.org\"大众><head> <meta charset=\"大众UTF-8\公众/> <title th:text=\公众用户信息\"大众>User</title> <!--默认拼接前缀路径,开头请勿再添加斜杠,防止支配运行报错!
--> <script th:replace=\"大众common/head::static\公众></script></head><body><div th:each=\公众user,userStat:${userList}\"大众 th:class=\公众${userStat.even}?'even':'odd'\"大众> 序号:<input type=\公众text\"大众 th:value=\"大众${userStat.count}\"大众/> 账号:<input type=\"大众text\"大众 th:value=\公众${user.username}\"大众/> 密码:<input type=\"大众password\"大众 th:value=\"大众${user.password}\"大众/> 韶光:<input type=\"大众text\"大众 th:value=\"大众${user.createTime}\"大众/> 韶光:<input type=\"大众text\公众 th:value=\"大众${#dates.format(user.createTime,'yyyy-MM-dd HH:mm:ss')}\公众/></div><script th:inline=\"大众javascript\"大众> //通过内联表达式获取用户信息 var userList = [[${userList}]]; console.log(userList)</script></body></html>

然后编写单个用户页面:

至此大功告成,然后快速启动项目,如图所示:

快速启动项目

然后访问用户列表: http://localhost:8080 ,如图所示:

然后访问单个用户: http://localhost:8080/user/1 ,如图所示: