博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thymeleaf 模板语言简介
阅读量:5124 次
发布时间:2019-06-13

本文共 14011 字,大约阅读时间需要 46 分钟。

参考网址: 

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

,该数据集合必须是可以遍历的,使用th:each标签:
NAME PRICE IN STOCK
Onions 2.41 yes

Return to home

可以看到,需要在被循环渲染的元素(这里是)中加入th:each标签,其中th:each="prod : ${prods}"意味着对集合变量prods进行遍历,循环变量是prod在循环体中可以通过表达式访问
条件求值If/UnlessThymeleaf中使用th:if和th:unless属性进行条件判断,下面的例子中,标签只有在th:if中条件成立时才显示: Login th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。SwitchThymeleaf同样支持多路选择Switch结构:

User is an administrator

User is a manager

默认属性default可以用*表示:

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 Male
Female
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

Genre:
内联      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 text
Some 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
此时html需要相应的配置文件。例如如下配置文件:en:tutorial.exercise4=Thymeleaf tutorial - exercise 10: internationalizationproduct.info=Product informationproduct.name=Product nameproduct.price=Product priceproduct.available=Product available fromback=Back frtutorial.exercise4=Tutorial De Thymeleaf - exercice 10: l'internationalisationproduct.info=Information du produitproduct.name=Nom du produitproduct.price=Prix du produitproduct.available=Produit disponible depuisback=Revenir
字符串拼接                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

 

转载于:https://www.cnblogs.com/xumBlog/p/8716164.html

你可能感兴趣的文章
php注释规范
查看>>
着陆攻击LAND Attack
查看>>
Xamarin XAML语言教程构建进度条ProgressBar
查看>>
iOS 9应用开发教程之iOS 9新特性
查看>>
在ASP.NET Core使用Middleware模拟Custom Error Page功能
查看>>
swfit-学习笔记(数组的使用)
查看>>
对自己的忠告
查看>>
2019CCPC湖南全国邀请赛-Chika and Friendly Pairs- 莫队+树状数组+离散化
查看>>
同步和异步简述
查看>>
XP Embedded:不同的用户使用不同的外壳程序
查看>>
如何生成JAR包
查看>>
CTabCtrl控件标签的相关设置
查看>>
python --条件判断和语句控制
查看>>
面向对象的四大特征
查看>>
Leetcode 206. Reverse Linked List
查看>>
九度oj题目1518:反转链表
查看>>
jsonp跨域请求响应结果处理函数(python)
查看>>
[poj3321]Apple Tree_dfs序_树状数组
查看>>
面向对象:包装类、对象处理、类成员
查看>>
2018.09.15 vijos1053Easy sssp(最短路)
查看>>