开发学院

您的位置:首页>教程>正文

教程正文

Thymeleaf 3.0教程:1.Thymeleaf简介

1.1 什么是Thymeleaf?

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

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

  Thymeleaf从一开始设计时就考虑到网络标准,尤其是HTML5,允许您根据需要创建完全验证的模板。

1.2 Thymeleaf可以处理什么样的模板?

  Thymeleaf 开箱即用,允许您处理六种模板,每种都称为模板模式:

  •   HTML

  •   XML

  •   TEXT

  •   JAVASCRIPT

  •   CSS

  •   RAW

  有两种标记模板模式(超文本标记语言和可扩展标记语言),三种文本模板模式(文本、JAVASCRIPT和CSS)和一种无操作模板模式(RAW)。

  HTML模板模式将允许任何类型的HTML输入,包括HTML5、HTML4和XHTML。将不执行验证或格式检查,模板代码/结构将在输出中得到最大程度的尊重。

  XML模板模式将允许XML输入。在这种情况下,代码应该是格式良好的:没有未关闭的标签,没有未加引号的属性,等等。如果发现格式冲突,解析器将抛出异常。请注意,该模式不会执行针对DTD或XML的任何验证。

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

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

  CSS模板模式将允许处理Thymeleaf应用程序中涉及的CSS文件。与JAVASCRIPT模式相似,CSS模板模式也是一种文本模式,使用文本模板模式中的特殊处理语法。

  RAW模板模式不会处理模板。它旨在用于插入未触及的资源(文件、网址响应等)放入正在处理的模板中。例如,可以将外部的、不受控制的HTML格式的资源包含到应用程序模板中,安全地知道这些资源可能包含的任何Thymeleaf代码都不会被执行。

1.3 方言:标准方言

  Thymeleaf是一个极其可扩展的模板引擎(事实上它可以被称为模板引擎框架),它允许您定义和定制你的模板将被处理到精细细节的方式。

  将某种逻辑应用于标记工件(标签、文本、注释或模板不是标记时的占位符)的对象称为处理器,一组处理器加上一些额外的工件通常是方言的组成部分。Thymeleaf的核心库提供了一种叫做标准方言的方言,对大多数用户来说应该足够了。

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

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

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

  Thymeleaf-spring3和Thymeleaf-spring4集成包都定义了一种方言,称为“spring标准方言”,这种方言与标准方言大部分相同,但有一些小的改动,以便更好地利用spring框架中的一些功能(例如,使用spring表达语言或spring代替OGNL)。因此,如果你是一个Spring MVC用户,你不会浪费时间,因为你在这里学到的几乎所有东西都将在你的Spring应用程序中有用。

  标准方言的大多数处理器都是属性处理器。这使得浏览器甚至在处理之前就能正确地显示超文本标记语言模板文件,因为它们会忽略额外的属性。例如,虽然使用标签库的JSP可能包含浏览器无法直接显示的代码片段,如:

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

  Thymeleaf标准方言允许我们通过以下方式实现相同的功能:

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

  这不仅可以被浏览器正确显示,还允许我们(可选地)在其中指定一个值(“James Carrot“),当原型在浏览器中静态打开时,该值属性将被显示,并且在模板处理过程中,该值将被${user.name}的评估结果所替代。

  这有助于您的设计人员和开发人员处理完全相同的模板文件,并减少将静态原型转换为工作模板文件所需的工作量。这样做的能力是一个叫做自然模板的特性。