参考网址:
1.1 Thymeleaf 在有网络和无网络的环境下皆可运行,而且完全不需启动WEB应用,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。 这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行; 当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。1.2 Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。1.3 Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
相比于其他的模板引擎,Thymeleaf最大的特点是通过HTML的标签属性渲染标签内容,以下是一个Thymeleaf模板例子:Good Thymes Virtual Grocery Welcome to our grocery store!
这是一段标准的HTML代码,这也就意味着通过浏览器直接打开它是可以正确解析它的结构并看到页面的样子。相比于其他的模板引擎在指定的位置通过 ${} 等表达式进行渲染,Thymeleaf则是一种针对HTML/XML定制的模板语言(当然它可以被扩展),它通过标签中的th:text属性来填充该标签的一段内容。上例中,
<p th:text="#home.welcome}" >Welcome to our grocery store!</p>
意味着<p>
标签中的内容会被表达式 #{home.welcome} 的值所替代,无论模板中它的内容是什么,之所以在模板中“多此一举“地填充它的内容,完全是为了它能够作为原型在浏览器中直接显示出来。 标准表达式语法
变量 Thymeleaf模板引擎在进行模板渲染时,还会附带一个Context存放进行模板渲染的变量,在模板中定义的表达式本质上就是从Context中获取对应的变量的值:Today is: 13 february 2011.
假设today的值为2016年7月14日,那么渲染结果为:Today is: 2016年7月14日.
。 可见Thymeleaf的基本变量和JSP一样,都使用${.}表示获取变量的值。
url 处理 URL在Web应用模板中占据着十分重要的地位,需要特别注意的是Thymeleaf对于URL的处理是通过语法@{…}来处理的。 Thymeleaf支持绝对路径URL: Thymeleaf 同时也能够支持相对路径URL: 1. 当前页面相对路径URL——user/login.html,通常不推荐这样写。 2. Context相关URL——/static/css/style.css另外,如果需要Thymeleaf对URL进行渲染,那么务必使用th:href,th:src等属性,下面是一个例子: view 下面两种url写法是比较推荐使用的, view view几点说明: 上例中URL最后的(orderId=${o.id})表示将括号内的内容作为URL参数处理,该语法避免使用字符串拼接,大大提高了可读性, @{...}表达式中可以通过{orderId}访问Context中的orderId变量, @{/order}是Context相关的相对路径,在渲染时会自动添加上当前Web应用的Context名字,假设context名字为app,那么结果应该是/app/order
字符串替换 很多时候可能我们只需要对一大段文字中的某一处地方进行替换,可以通过字符串拼接操作完成: 一种更简洁的方式是:, 当然这种形式限制比较多,|…|中只能包含变量表达式${…},不能包含其他常量、条件表达式等。
运算符 在表达式中可以使用各类算术运算符,例如+, -, *, /, % th:with="isEven=(${prodStat.count} % 2 == 0)" 逻辑运算符>, <, <=,>=,==,!=都可以使用, >, <, >=, <= (gt, lt, ge, le) == , != ( eq , ne )
gt
:great than(大于)>
ge
:great equal(大于等于)>=
eq
:equal(等于)==
lt
:less than(小于)<
le
:less equal(小于等于)<=
ne
:not equal(不等于)!=
唯一需要注意的是使用<,>时需要用它的HTML转义符: th:if="${prodStat.count} gt 1" th:text="'Execution mode is ' + ( (${execMode} == 'dev')? 'Development' : 'Production')"
循环 渲染列表数据是一种非常常见的场景,例如现在有n条记录需要渲染成一个表格Product list
NAME | PRICE | IN STOCK |
---|---|---|
Onions | 2.41 | yes |
条件求值If/UnlessThymeleaf中使用th:if和th:unless属性进行条件判断,下面的例子中,标签只有在th:if中条件成立时才显示: Login th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。SwitchThymeleaf同样支持多路选择Switch结构:默认属性default可以用*表示:User is an administrator
User is a manager
User is an administrator
User is a manager
User is some other thing
Utilities为了模板更加易用,Thymeleaf还提供了一系列Utility对象(内置于Context中),可以通过#直接访问: - #dates - #calendars - #numbers - #strings - arrays - lists - sets - maps - … 下面用一段代码来举例一些常用的方法:#dates/* * Format date with the specified pattern * Also works with arrays, lists or sets */${#dates.format(date, 'dd/MMM/yyyy HH:mm')}${#dates.arrayFormat(datesArray, 'dd/MMM/yyyy HH:mm')}${#dates.listFormat(datesList, 'dd/MMM/yyyy HH:mm')}${#dates.setFormat(datesSet, 'dd/MMM/yyyy HH:mm')}/* * Create a date (java.util.Date) object for the current date and time */${#dates.createNow()}/* * Create a date (java.util.Date) object for the current date (time set to 00:00) */${#dates.createToday()}#strings/* * Check whether a String is empty (or null). Performs a trim() operation before check * Also works with arrays, lists or sets */${#strings.isEmpty(name)}${#strings.arrayIsEmpty(nameArr)}${#strings.listIsEmpty(nameList)}${#strings.setIsEmpty(nameSet)}/* * Check whether a String starts or ends with a fragment * Also works with arrays, lists or sets */${#strings.startsWith(name,'Don')} // also array*, list* and set*${#strings.endsWith(name,endingFragment)} // also array*, list* and set*/* * Compute length * Also works with arrays, lists or sets */${#strings.length(str)}/* * Null-safe comparison and concatenation */${#strings.equals(str)}${#strings.equalsIgnoreCase(str)}${#strings.concat(str)}${#strings.concatReplaceNulls(str)}/* * Random */${#strings.randomAlphanumeric(count)}
综合实例 (参考网址: )
(thymeleaf手册参考网址:) 迭代Thymeleaf tutorial: exercise 1 Thymeleaf tutorial - Answer for exercise 1: iteration
Product list
Description | Price | Available from |
---|---|---|
Red Chair | $123 | 2014-12-01 |
White table | $200 | 15-Jul-2013 |
Reb table | $200 | 15-Jul-2013 |
Blue table | $200 | 15-Jul-2013 |
迭代统计
Thymeleaf tutorial: exercise 2 Thymeleaf tutorial - Solution for exercise 2: iteration stats
Product list
Index | Description | Price | Available from |
---|---|---|---|
1 | Red chair | $350 | 28-Jun-2013 |
2 | White table | $200 | 15-Jul-2013 |
3 | Reb table | $200 | 15-Jul-2013 |
4 | Blue table | $200 | 15-Jul-2013 |
条件判断
Thymeleaf tutorial: exercise 3 Thymeleaf tutorial - Answer for exercise 3: conditions
Product list
Description | Price | Available from | |
---|---|---|---|
Red chair | $350 | 28-Jun-2013 | Special offer! |
更多条件判断
Thymeleaf tutorial: exercise 4 Thymeleaf tutorial - Answer for exercise 4: more on conditions
Customer list
First name | Last name | Gender | Payment method | Balance |
---|---|---|---|---|
Peter | Jackson | Unknown | Direct debit Payment must be done in the next 4 days | 350 |
Mary | Johanson | Credit card | 5000 | |
Robert | Allen | Credit card Payment must be done in the next 4 days | 50000 |
Spring表达式语言
Thymeleaf tutorial: exercise 5 Thymeleaf tutorial - Solution for exercise 5: Spring Expression language
Arithmetic expressions
Four multiplied by minus six multiplied by minus two module seven:
123
Object navigation
Description field of paymentMethod field of the third element of customerList bean:
Credit card
Object instantiation
Current time milliseconds:
22-Jun-2013
T operator
Random number:
123456
超链接Thymeleaf tutorial: exercise 6 Thymeleaf tutorial - Answer for exercise 6: links
Product actions
表单Thymeleaf tutorial: exercise 7 Thymeleaf tutorial - Solution for exercise 7: forms
Customer edition
内联Thymeleaf tutorial: exercise 8 Thymeleaf tutorial - Solution for exercise 8: inlining
Birthday email
转义和非转义文本Thymeleaf tutorial: exercise 9 Thymeleaf tutorial - Solution for exercise 9: escaped and unescaped text
Some escaped textSome unescaped text
国际化Thymeleaf tutorial: exercise 10 Thymeleaf tutorial - Solution for exercise 10: internationalization
Product information
- Product name
- Red chair
- Product price
- 350
- Product available from
- 28-Jun-2013
字符串拼接Thymeleaf tutorial: exercise 11 Thymeleaf tutorial - Answer for exercise 11: string concatenation
Product information
- Product price
- 235
简单数据转换(数字,日期)Thymeleaf tutorial: exercise 12 Thymeleaf tutorial - Answer for exercise 12: bean values
Product information
- Product name
- red Chair
- Product price
- 180
- Product available from
- 2014-12-01
bean值替换Thymeleaf tutorial: exercise 13 Thymeleaf tutorial - Answer for exercise 13: bean values
Product information
- Product name
- Red Chair
- Product price
- 350
- Product available from
- 2014-12-01