thymeleaf

Thymleaf

1.Thymleaf简介

Thymleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本
Thymleaf旨在提供一个优雅的、高度可维护的创建模板的方式。为了实现这一目标,Thymeleaf建立在自然模板的概念上,将其逻辑注入到模板文件中,不会影响模板设计原型。这改善了设计的沟通,弥合了设计和开发团队之间的差距。

2.Thymeleaf能处理哪些模板

  • HTML
  • XML
  • TEXT
  • JAVASCRIPT
  • CSS
  • RAW
    这六种模板模式包含:
    两种标记模板模式(HTML和XML),
    三种文本模板模式(TEXT,JAVASCRIPT和CSS)
    一种无操作模板模式(RAW).

3.Thymeleaf的使用

3.1先导入thymeleaf的依赖

<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

3.2导入thymeleaf的命名空间

<html xmlns:th="http://www.thymeleaf.org">
  • 比较运算符
gt:(大于)>
ge:(大于等于)>=
eq:(等于)==
lt:(小于)<
le:(小于等于)<=
ne:(不等于)!=
  • 布尔运算符
二进制运算符:and、or
布尔否定(一元运算符):!,not
  • 条件运算符
1.Switch Case语句
<div th:switch="${user.role}">
	<div th:case="student">user is a student</div>
	<div th:case="worker">user is a worker</div>
</div>

2.If语句
<div th:if="${userSize} lt '3' ">
	...如果userSize<3运行该代码段
</div>

3.(if)?(then)	if-then
  (if)?(then):(else) if-then-else
   
   <div th:class="${count} ? 'even' : 'odd' ">
   
   条件表达式也可以使用括号来嵌套
   <div th:class="${count} ?  (${num} ? '1' : '2' ) : '3'  ">

   else表达式也可以省略,当条件为false时,会返回null.


  • 简单表达式:
变量表达式: ${...}
选择变量表达式:\*{...}
消息表达式:#{...}
链接网址表达式:@{...}
片段表达式:~{...}

4.标准表达式语法

4.1消息

#{…}消息表达式

<p th:utext="#{home.welcome}">Welcome to our grocery store
!</p>

4.2变量

${…}变量表达式

4.2.1基本表达式对象
#ctx:上下文对象
#vars:上下文变量
#locale:上下文区域设置
#request:(仅在Web Contexts中) HttpServletRequest对象
#response:(仅在Web上下文中) HttpServletResponse对象
#session:(仅在Web上下文中) HttpSession对象
#servletContext:(仅在Web上下文中)  ServletContext对象
4.2.2工具表达式对象
#execInfo:有关正在处理的模板的信息。
#messages:⽤于在变量表达式中获取外部化消息的⽅法,与使⽤#
{...}语法获得的⽅式相同。
#uris:转义URL / URI部分的⽅法
#conversions:执⾏配置的转换服务(如果有的话)的⽅法。
#dates:java.util.Date对象的⽅法:格式化,组件提取等
#calendars:类似于#dates,但对于java.util.Calendar对象。
#numbers:⽤于格式化数字对象的⽅法。
#strings:String对象的⽅法:contains,startsWith,prepending /
appending等
#objects:⼀般对象的⽅法。
#bools:布尔评估的⽅法。
#arrays:数组的⽅法。
#lists:列表的⽅法。
#sets:集合的⽅法。
#maps:地图⽅法。
#aggregates:在数组或集合上创建聚合的⽅法。
#ids:处理可能重复的id属性的⽅法(例如,作为迭代的结果)。
4.2.3重新格式化首页的日期

我们可以这样做:

WebContext ctx =
new WebContext(request, response, servletContext, requ
est.getLocale());
ctx.setVariable("today", Calendar.getInstance());
templateEngine.process("home", ctx, response.getWriter());

然后在视图层执行日期格式化:

<p>
Today is: <span th:text="${#calendars.format(today,'dd M
MMM yyyy')}">13 May 2011</span>
</p>

4.3选择表达式(星号语法)

我们不仅可以将变量表达式写为${…},还可以作为*{…}。
这两种方式有一个重要的区别:星号语法计算所选对象而不是整个上下文的表达式。也就是说,只要没有选定的对象, $ 和 * 语法完全相同。
什么是选定对象?使用th:object属性的表达式的结果,我们在用户个人资料页面中使用一个:

<div th:object="${session.user}">
<p>Name: <span th:text="*{firstName}">Sebastian</spa.</p>
<p>Surname: <span th:text="*{lastName}">Pepper</span</p>
<p>Nationality: <span th:text="*{nationality}">Satur/span>.</p>
</div>

这完全等同于

<div>
<p>Name: <span th:text="${session.user.firstName}">Sebas
tian</span>.</p>
<p>Surname: <span th:text="${session.user.lastName}">Pep
per</span>.</p>
<p>Nationality: <span th:text="${session.user.nationalit
y}">Saturn</span>.</p>
</div>

当对象选择到位时,所选对象也将作为#object表达式变量可⽤于美元表
达式:

<div th:object="${session.user}">
<p>Name: <span th:text="${#object.firstName}">Sebastian<
/span>.</p>
<p>Surname: <span th:text="${session.user.lastName}">Pep
per</span>.</p>
<p>Nationality: <span th:text="*{nationality}">Saturn</s
pan>.</p>
</div>

4.4URL链接

@{…}
有不同类型的网址:

绝对⽹址:http://www.thymeleaf.org
相对URL,可以是:
⻚⾯相对:user / login.html
上下⽂相关:/ itemdetails?id = 3(服务器中的上下⽂名称将⾃动添
加)
服务器相对:〜/ billing / processInvoice(允许在同⼀服务器中的其
他上下⽂(=应⽤程序)中调⽤URL。
协议相关URL://code.jquery.com/jquery-2.0.3.min.js

注意:

1.th:href是⼀个修饰符属性:⼀旦处理,它将计算要使⽤的链接URL,
并将该值设置为<a>标签的href属性。
2.我们被允许使⽤表达式的URL参数(可以在orderId = $ {o.id}中看
到)。所需的URL参数编码操作也将⾃动执⾏。
3.如果需要⼏个参数,这些参数将以逗号分隔:@ {/ order /
process(execId = $ {execId},execType ='FAST')}
4.URL路径中也允许使⽤变量模板:@ {/ order / {orderId} /
details(orderId = $ {orderId})}
5.以/开头的相对URL(例如:/ order / details)将⾃动以应⽤程序上下
⽂名称为前缀。
6.如果cookie未启⽤或尚未知道,则可能会在相对URL中添加“;
jsessionid = ...”后缀,以便会话被保留。这被称为URL重写,
Thymeleaf允许您使⽤Servlet API中的每个URL的
response.encodeURL(...)机制来插⼊⾃⼰的重写过滤器。
7.th:href属性允许我们(可选地)在我们的模板中有⼀个⼯作的静态
href属性,这样当我们直接打开原型设计时,我们的模板链接可以被
浏览器导航。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值