Thymeleaf 文本模板模式
1. 文本语法
在Thymeleaf的三种模板模式被认为是文字:TEXT,JAVASCRIPT和CSS。这使它们与标记模板模式区别开来:HTML和XML。
文本模板模式与标记模式之间的关键区别在于,在文本模板中没有标签可以以属性的形式插入逻辑,因此我们必须依赖其他机制。
这些机制中的第一个也是最基本的是内联,我们已在前一章中详细介绍过。内联语法是在文本模板模式下输出表达式结果的最简单方法,因此这是文本电子邮件的完美有效模板。
Dear [(${name})], Please find attached the results of the report you requested with name "[(${report.name})]". Sincerely, The Reporter.
即使没有标签,上面的例子也是一个完整有效的Thymeleaf模板,可以在TEXT模板模式下执行。
但是为了包含比仅仅输出表达式更复杂的逻辑,我们需要一种新的基于非标记的语法:
[# th:each="item : ${items}"]
- [(${item})]
[/]
这实际上是更详细的浓缩版本:
[#th:block th:each="item : ${items}"]
- [#th:block th:utext="${item}" /]
[/th:block]
请注意这个新语法是如何基于声明为[#element ...]而不是的元素(即可处理标记)<element ...>。元素是一样开放[#element ...]和封闭状[/element],和独立标签可以通过最小化与开放元素声明/中几乎等同于XML标签的方式:[#element ... /]。
标准方言只包含其中一个元素的处理器:已知的th:block,虽然我们可以在我们的方言中扩展它并以通常的方式创建新元素。此外,允许将th:blockelement([#th:block ...] ... [/th:block])缩写为空字符串([# ...] ... [/]),因此上面的块实际上等效于:
[# th:each="item : ${items}"]
- [# th:utext="${item}" /]
[/]
并且给定[# th:utext="${item}" /]等效于内联非转义表达式,我们可以使用它来获得更少的代码。因此,我们最终得到了上面看到的第一个代码片段:
[# th:each="item : ${items}"]
- [(${item})]
[/]
请注意,文本语法需要完整的元素平衡(没有未关闭的标记)和引用的属性 - 它比HTML风格更加XML风格。
让我们看一个更完整的TEXT模板示例,一个纯文本电子邮件模板:
Dear [(${customer.name})],
This is the list of our products:
[# th:each="prod : ${products}"]
- [(${prod.name})]. Price: [(${prod.price})] EUR/kg
[/]
Thanks,
The Thymeleaf Shop
执行后,结果可能是这样的:
Dear Mary Ann Blueberry,
This is the list of our products:
- Apricots. Price: 1.12 EUR/kg
- Bananas. Price: 1.78 EUR/kg
- Apples. Price: 0.85 EUR/kg
- Watermelon. Price: 1.91 EUR/kg
Thanks,
The Thymeleaf Shop
另一个例子是JAVASCRIPT模板模式,一个greeter.js文件,我们作为文本模板处理,我们从HTML页面调用哪个结果。
下一章:Thymeleaf 商店更多页面
现在我们了解了很多关于使用Thymeleaf的信息,我们可以在我们的网站上添加一些新页面来进行订单管理。请注意,我们将重点关注HTML代码,但如果您想查看相应的控制器,可以查看捆绑的源代码。 1. ...