thymeleaf,thymeleaf模板引擎

http://www.itjxue.com  2023-01-15 15:39  来源:未知  点击次数: 

一篇文章搞懂Thymeleaf

在控制器中往页面传递几个变量:

在页面中使用变量表达式${}来获取它们:

可以看到变量表达式不但可以获取变量的属性值,甚至还可以访问变量的方法(getName()和upcaseName())。session代表HttpSession对象。

*{}代指th:object所指定的对象,即${session.user}。

URL链接表达式会给URL自动添加上下文的名字。比如:

解析后的href值为 。

当需要在URL中传递参数时,比如这样 ,可以如下操作:

传递多个参数:

路径变量的写法:

后端接受路径变量:

除了使用'...' + ${}来连接字面量和变量外,还可以使用|...|来代替,比如:

等价于:

注意: 在| ... |字面替换中只允许有变量表达式${...}

条件表达式实际上就是三目运算符。比如:

条件表达式也可以使用括号嵌套:

else表达式也可以省略,在这种情况下,如果条件为false,则返回空值:

默认表达式是一种特殊类型的条件值,不带then部分。比如:

表示,当${session.user.sex}为null时,值为sex is unknown,否则为表达式的值。这就好像为表达式指定了一个默认值一样。其等价于:

Thymeleaf默认提供了丰富的表达式工具类,这里列举一些常用的工具类。

比如:

注意事项 :

值得注意的是,在使用工具类对某个表达式进行处理时候,你可能会写成:

${#strings.isEmpty(${session.user.name})}。

实际上这种写法是错误的,将抛出异常。正确的写法为:

${#strings.isEmpty(session.user.name)}。

在Thymeleaf中,使用 th:each 标签可对集合类型进行迭代,支持的类型有:

1.任何实现了 java.util.List 的对象;

2.任何实现了 java.util.Iterable 的对象;

3.任何实现了 java.util.Enumeration 的对象;

4.任何实现了 java.util.Iterator 的对象;

5.任何实现了 java.util.Map 的对象。当迭代maps时,迭代变量是 java.util.Map.Entry 类型;

6.任何数组。

一个简单的例子:

其中${prods}为迭代值,prod为迭代变量。除此之外,我们还可以通过状态变量获取迭代的状态信息,比如:

其中stat就是状态变量。默认为迭代变量加上Stat后缀,在本例中,不直接申明stat,则状态变量名称为prodStat。状态变量包含以下信息:

1.index,当前迭代下标,从0开始;

2.count,当前迭代位置,从1开始;

3.size,迭代变量中的总计数量;

4.current,每次迭代的迭代变量;

5.even/odd,当前迭代是偶数还是奇数;

6.first,当前迭代的是不是第一个;

7.last,当前迭代的是不是最后一个;

例子:

页面显示如下:

当prod.comments不为空时,页面将渲染出该a标签。

另外,th:if有一个反向属性th:unless,用于代替上面的not:

th:case="*"表示默认选项,相当于default:

在模板的编写中,通常希望能够引入别的模板片段,比如通用的头部和页脚。Thymeleaf模板引擎的 th:include , th:insert 和 th:replace 属性可以轻松的实现该需求。不过从Thymeleaf 3.0版本后, 不再推荐使用 th:include 属性。

在index.html页面路径下创建一个footer.html:

在footer.html中,使用 th:fragment 属性定义了 footer 片段,然后在index.html中引用它:

其中footer为被引用的模板名称(templatename),copy为th:fragment标记的片段名称(selector),~{...}称为片段表达式,由于其不是一个复杂的片段表达式,所以可以简写为:

页面显示如下:

通过观察渲染出的源码可发现th:include,th:insert和th:replace的区别所在:

注意: 引用本页面的片段可以略去templatename,或者使用this来代替。

如果片段不包含th:fragment属性,我们可以使用CSS选择器来选中该片段,如:

引用方式:

使用th:fragment定义的片段可以指定一组参数:

然后在引用的时候给这两个参数赋值,有如下两种方式:

对于第二种方式,onevar和twovar的顺序不重要,并且使用第二种方式引用片段时,片段可以简写为:

比如有如下片段:

当value为all时,页面渲染为:

当value为body时,页面渲染为:

当value为tag时,页面渲染为:

当value为all-but-first时,页面渲染为:

在Thymeleaf模板引擎中,使用 th:with 属性来声明一个局部变量

在上面div中, th:width 属性声明了一个名为firstPer的局部变量,内容为 ${persons[0]} 。该局部变量的作用域为整个div内。

也可以一次性定义多个变量:

th:with属性允许重用在同一个属性中定义的变量:

参考:

thymeleaf怎么发音

thymeleaf发音是:? [taim li:f]

有关的造句如下:

1. The trees are coming into?leaf.

树开始长叶子了。

2. I was shaking like a?leaf.

我像树叶似的直哆嗦。

3. The trees are just coming into?leaf.

树木正好在长叶子。

4. At rest the insect looks like a dead?leaf.

这种昆虫不动时看上去像一片枯叶。

5. I was shaking all over, trembling like a?leaf.

我浑身颤抖、像一片叶子似的抖动。

6. The illustration shows a section through a?leaf.

图中所示为叶的剖面。

7.?Leaf-shoots were beginning to sprout on the hawthorn.

叶芽开始在山楂树上长出来。

thymeleaf测试结果很糟糕,为什么Spring还要推荐使用它?

一个产品的发行就算再差,也都会有它的优点和缺点,就只是在于你看它对于那个方面,所以一个产品的发行你要客观的去认识它,都有必要大体看待。对于thymeleaf的测试结果很糟糕,但是spring去推荐使用它,肯定是有好处的。

首先主要是thymeleaf的实现机制相较于其他模板引擎更加的优雅。由于各种绑定与控制采用属性的方式,绑定的机制可以采用属性的方式,你就试想一下,你打游戏有属性加成是不是很好用的,你有属性加成就会有可以使得模板不破坏html原有的语法结构,那么就会有不一样的效果,这样就获得了其他模板引擎没有的一个重要特性:thymeleaf定义的模板是可以被正常渲染的。那么这样你改模板和测试就会非常方便,你是不是就会更好操作,这是有利的。

其次就是Thymeleaf 的生产力比较好。它的生产能力非常强,它的标签比较简单,最大的优点,那么就是非常好的,所以要正确看待,它允许前端人员即时查看静态页面的效果,有的制造商时没有其它模板做不到的功能。所以你要学会考虑到横向添加服务很方便,那么你就意想不到,所以效率并不是什么大问题。

它的性能不是唯一指标,也就是让它一定能力,除此外还需要考虑开发效率它们的测试效率用户体验等等,比如你想减少内部的服务器资源消耗,完全可以把大部分渲染工作丢给用户浏览器,对他来的可能也就有一点点卡,那你就不好去考虑,所以你就会考虑其他的,毕竟要好的才会有人去推荐,不然谁会推荐。

(责任编辑:IT教学网)

更多

推荐CSS教程文章