Thymeleaf 2.0 新特性一览

阅读数:3225 2012 年 3 月 4 日

话题:Java语言 & 开发

Thymeleaf 是一个面向 Java 的 XML/HTML 模板引擎,它的主要目标是提供格式良好的模板创建方式。Thymeleaf 2.0包含了许多新特性,其中包括为 Thymeleaf 扩展开发人员改善了扩展的创建过程。下面让我们快速浏览一下这些新增的特性:

性能

Thymeleaf 内部架构进行了重新设计,模板执行引擎被彻底重写。这意味着巨大的性能提升。基准测试显示执行时间从之前的 4.19ms 降到现在的 1.26ms。

th:switch/th:case

th:switch 中指定的表达式在估值后,会与内部 th:case 属性(attribute)中的表达式结果进行比较。其中“*”被用来指定默认选项。而在以前的版本中,开发人员需要为每一个 p 元素指定一个 th:if。

	<div th:switch="${user.role}">
		<p th:case="'admin'">Administrator</p>
		<p th:case="*">User</p>
	</div>

th:remove="all-but-first"

创建一个表格模板,一般意味着你会移除多余的占位符行。新的 th:remove="all-but-first" 可以更轻松地完成这项工作。此前,开发人员必须为表格中所有待删除的行放上 th:remove="all"语句。

	<table th:remove="all-but-first">
		<tr th:each="user : ${users}">
			<td th:text="${user.name}">John</td>
		</tr>
		<tr>
			<td>Joe</td>
		</tr>
		<tr>
			<td>Mike</td>
		</tr>
	</table>

行号信息

在呼声最高的功能中,有一个呼声是希望 Thymeleaf 在解析模板碰到错误时能够输出行号信息。多亏新的模板引擎,现在这项功能已经有了。

DOM 选择器

Thymeleaf 1.1 中可以通过指定 XPath 表达式来包含模板片段。由于模板引擎重写,Thymeleaf 2.0 中使用了一个叫做“DOM 选择器”的功能替换了对 XPath 的支持。使用 DOM 选择器可以选择 DOM 中一块特定区域,也可以使用 XPath 语法的一部分子集。

  • /x 表示当前结点直接孩子中名字为 x 的元素结点;
  • //x 表示当前节点任意深度的子孙结点中名字为 x 的元素结点;
  • x[@z='v'] 表示名字为 x,且属性 z 的值为“v”的元素结点 ;
  • x[@z1='v1' and @z2='v2'] 表示名字为 x,且属性 z1 和 z2 值分别为“v1”和“v2”的元素结点;
  • x[i] 表示名字为 x,且位置在兄弟结点中排在数字 i 的元素结点;
  • x[@z='v'][i] 表示名字为 x,属性 z 的值为“v”,且满足位置在兄弟结点中排在数字 i 的元素结点;

模板片段

新的模板引擎允许开发人员处理模板片段而不再是整个 XML 文档,例如,现在不需要 DOCTYPE 或文档根元素,且模板可以只是某个 XML 片段。

通用缓存基础架构(Generalized Cache Infrastructure)

Thymeleaf 2.0 更新了缓存基础架构,并给予开发人员控制缓存的用途以及怎样使用缓存。新的 ICacheManager 接口定义的扩展点,允许用户指定他们自己的 ICache 实现。StandardCacheManager 被列为 ICacheManager 的默认实现。

新的 XHTML DTD

新引入的 th:switch 和 th:case 属性需要 Thymeleaf DTD 中作出一些改变。以下是新的 DTD:

	<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-3.dtd">
	<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-transitional-thymeleaf-3.dtd">
	<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-frameset-thymeleaf-3.dtd">

	<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring3-3.dtd">
	<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-transitional-thymeleaf-spring3-3.dtd">
	<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-frameset-thymeleaf-spring3-3.dtd">

替换 Java DOM API

Thymeleaf 2.0 从架构中移除了 Java DOM API,并替换成它自己的 DOM 表示。新的 DOM 为 Thymeleaf 量身订做,并且比旧标准更加简单。 它还包含了一些优化,可以让 Thymeleaf 在具有较少资源的情况下也可以较快地处理模板。

IProcessor

在 Thymeleaf 1.1 中,处理器被分为两组:属性处理器(attribute processor)和标签处理器(tag processor)。在 Thymeleaf 2.0 中,新的 DOM 泛化了模式,属性处理器和标签 / 元素处理器现在都是新的通用 IProcessor 接口的子级。这意味着处理器可以应用到任何 DOM 结点上,如元素、文本节点和注释等等。

通用模板模式(Generalized Template Modes)

Thymeleaf 2.0 泛化了模板模式,它可以让 Thymeleaf 扩展开发人员创建他们自己的模板模式,而不局限于 6 个标准的模板模式(XML,VALIDXML,XHTML,VALIDXHTML,HTML5 和 LEGACYHTML5)。模板模式现在必须在模板解析器配置中以字符串形式指定,而不是使用已经弃用的 TemplateMode 枚举。

想要了解更多信息,请访问 Thymeleaf 网站更新日志

查看英文原文:http://www.infoq.com/news/2012/02/thymeleaf-2-0