Thymeleaf教程

本版本翻译官方的英文版本, 又缩减一些, 多了一些案例. 由云图文档整理发布.

文档版本: 20170724

项目版本: 3.0.7.RELEASE

项目地址: http://www.thymeleaf.org


1. 介绍Thymeleaf

1.1 什么是Thymeleaf

Thymeleaf是一个面向web和独立环境的现代服务器端Java模板引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本。


Thymeleaf的主要目标是提供一种优雅且高度可维护的创建模板的方法。为了实现这一点,它建立在自然模板的概念上,以一种不会影响模板的方式将其逻辑注入模版文件中,而不会被用作设计原型。这改进了设计的交流,并弥补了设计和开发团队之间的差距。

1.2 Thymeleaf是什么样的模板?

“开箱即用”,Thymeleaf允许您处理六种模板, 或者称作模板模式:

  • HTML

  • XML

  • TEXT

  • JAVASCRIPT

  • CSS

  • RAW

有两个标记模板模式(HTML和XML)、三个文本模板模式(TEXT、JAVASCRIPT和CSS)和一个no-op模板模式(RAW)。

HTML模板模式将允许任何类型的HTML输入,包括HTML5、HTML 4和XHTML。没有验证或良好的格式检查将执行,并且模板代码/结构将会受到最大可能程度的输出。

XML模板模式允许XML输入。在这种情况下,代码应该是格式良好的——没有未关闭的标记,没有未引用的属性等等——如果找到错误的格式,解析器将抛出异常。注意,不会执行任何验证(针对DTD或XML模式)。

TEXT模板模式将允许对非标记性质的模板使用特殊语法。此类模板的示例可能是文本邮件或模板文档。请注意,HTML或XML模板也可以作为文本进行处理,在这种情况下,它们不会被解析为标记,而每个标记、DOCTYPE、注释等都将被当作纯文本处理。

JAVASCRIPT模板模式允许在Thymeleaf应用程序中处理JAVASCRIPT文件。这意味着能够在JavaScript文件中使用模型数据,就像在HTML文件中那样,但要使用JavaScript特定的集成,比如专门的转义或自然脚本。JAVASCRIPT模板模式被认为是文本模式,因此使用与文本模板模式相同的特殊语法。

CSS模板模式允许处理Thymeleaf应用程序中的CSS文件。与JAVASCRIPT模式类似,CSS模板模式也是文本模式,并使用文本模板模式中的特殊处理语法。

原始模板模式将根本不处理模板。它的目的是将未开发的资源(文件、URL响应等)插入到正在处理的模板中。例如,外部的、不受控制的HTML格式的资源可以被包含到应用程序模板中,安全的知道这些资源可能包括的任何Thymeleaf代码都不会被执行。

1.3 方言: 标准方言

Thymeleaf是一个非常可扩展的模板引擎(实际上它可以称为模板引擎框架),它允许您定义和自定义您的模板将被处理成精细级别的细节。

一个将某些逻辑应用于标记构件(如果模板不是标记的标记、一些文本、注释,或者仅仅是占位符)的对象称为处理器,而这些处理器的集合——加上一些额外的工件——是一种方言通常包含的东西。在盒子里,Thymeleaf的核心库提供了一种叫做标准方言的方言,对大多数用户来说应该足够了。

请注意,方言实际上没有处理器,完全由其他类型的工件组成,但处理器无疑是最常见的用例。

本教程涵盖了标准方言。在接下来的页面中,您将了解到的每个属性和语法特性都是由这种方言定义的,即使没有明确提到。

当然,如果用户想在利用库的高级特性的同时定义自己的处理逻辑,就可以创建他们自己的方言(甚至扩展标准的方言)。Thymeleaf也可以被配置为一次使用几种方言。

官方thymeleaf-spring3和thymeleaf-spring4集成包都定义一个方言称为“SpringStandard方言”,大部分是一样的标准方言,但适应更好地利用Spring框架的一些特性(例如,通过使用Spring表达式语言或图像代替OGNL展示出)。因此,如果您是Spring MVC用户,那么您不是在浪费时间,因为您在这里学到的几乎所有东西都将在Spring应用程序中使用。

标准方言的大部分处理器都是属性处理器。这允许浏览器在被处理之前正确地显示HTML模板文件,因为它们只会忽略附加的属性。例如,虽然使用标记库的JSP可能包含一个不直接由浏览器显示的代码片段:

<form:inputText name="userName" value="${user.name}" />

…Thymeleaf标准方言将使我们能够实现相同的功能:

<input type="text" name="userName" value="James Carrot" th:value="${user.name}" />

这不仅可以被浏览器正确显示,但这也让我们(可选)指定一个值属性(“詹姆斯胡萝卜”,在这种情况下),将显示静态原型时在浏览器中打开,这将取代${user.name}在处理模板的时候。

这可以帮助您的设计人员和开发人员在相同的模板文件上工作,并减少将静态原型转换为工作模板文件所需的工作。这样做的能力叫做自然模板。



关注极客云图了解更多内容