文本模板模式 内联 grocery更多页面 13.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页面调用哪个结果。请注意,这不是