Thymeleaf 2.0新特性一览

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 网站 和更新日志。

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

你可能感兴趣的:(Thymeleaf 2.0新特性一览)