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:
替换 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 枚举。
评论