2.3.25 (在 Apache 孵化)
Page Contents
发布日期:2016-06-26
这是一个稳定的最终版本. 在该项目成为完全被接受(分级)的 Apache 项目之前,Apache Software Foundation 要求使用“ incubating”后缀。
FTL 方面的更改
- 扩展了list directive以支持列表哈希(例如
Map
-s),例如<#list map as k, v>${k}: ${v}</#list>
,其中k
和v
是哈希的键-值对中的键和值。
Java 方面的更改
-
添加了用于扩展
TemplateModelHashEx
的TemplateModelHashEx2
接口,该接口使用一种列出哈希键值对内容的方法。 (这是list directive的新哈希列表功能所利用的,但是如果所有键都是字符串,则不需要此功能。) -
延迟导入:使用新的布尔设置
lazy_imports
和lazy_auto_imports
,您可以使导入(如<#import "lib/utils.ftl" as u>
)和/或自动导入成为惰性。懒惰地导入时,将像以前一样立即创建名称空间变量(在此示例中为u
),但是只有在(如果有的话)访问导入的名称空间的内容时,才会加载和处理导入的模板。它的主要应用是自动导入,在这种情况下,您不需要导入模板中实际未使用的模板的开销。 (此外,添加了新的Environment.importLib
方法重载,您可以在其中指定是延迟导入还是急切导入.)这些新设置可以在Configuration
,Template
(TemplateConfiguration
)和Environment
级别上进行设置。 -
现在可以在每个模板的基础上设置
auto_import
和auto_include
设置(例如具有特定名称模式的模板具有不同的自动导入)。现在可以实现,因为这些设置已从Configuration
级别降低到更通用的Configurable
级别,因此也被TemplateConfiguration
和Environment
继承。 -
新的
Configuration
(和TemplateConfiguration
)设置tab_size
。这仅影响错误消息中报告的列号的计算方式(以及其他 API 可用的列号)。它不会影响模板的输出。默认为 8. -
向
DefaultObjectWrapper
(和DefaultObjectWrapperBuilder
)添加了新设置:iterableSupport
。当您不能对仅实现 Java 5java.lang.Iterable
(不要与Iterator
混淆)但不能实现Collection
的值不能使用#list
(或?has_next
等)时,此问题得以解决。默认情况下未启用此功能,因为它与某些现有模板不兼容,通常是因为它们已在模板中使用someIterable.iterator()
作为解决方法。启用此功能后,Iterable
对象将不再被 FreeMarker 视为通用 Java 对象,因此,与Collection
-s 一样,其 API 也不会公开给模板(当然,通过?api
除外)。 -
添加了
Configurable.getCustomNumberFormatsWithoutFallback
和Configurable.getCustomDateFormatsWithoutFallback
方法,以使自定义代码更容易调查自定义形式设置Map
层次结构。 -
已修复的错误(FREEMARKER-18):如果在同一个 TLD 中使用相同的名称定义了 JSP 自定义标记和 EL 函数,则 EL 函数将覆盖自定义标记。当添加了 EL 功能支持时,这是在 2.3.23 中引入的错误。 JSP 允许同一 TLD 中的自定义标签和 EL 功能具有相同的名称。现在,在这种情况下,我们将两者合并为一个值,既可以作为用户定义的指令(
<@my.foo...>
)也可以作为函数(my.f(...)
)进行调用。 -
固定的错误(FREEMARKER-19):自 2.3.25 开始,解析器计算的列号假定选项卡大小为 1(更新 JavaCC 的有害副作用),而之前假定选项卡大小为 8.默认值恢复为 8.影响了错误消息中的列号。如果第一行或最后一行包含制表符,它也会破坏一些很少使用的 AIP 的输出,即
Template.getSource(beginCol, beginLine, endCol, endLine)
,TemplateObject.getSource()
并通过TemplateObject.toString()
。 -
错误修复:在 2.3.24 中进行了回归,其中
Configuration.setAutoImports()
尚未删除之前添加的自动导入。 (尽管应用程序不太可能使用该方法,而且也不会更早地添加自动导入.) -
修正了错误:当在
Template
和应用的TemplateConfiguration
中同时设置TemplateConfiguration.apply(Template)
和customNumberFormats
Map
-s 时,它们没有合并,相反,它只是将值保留在Template
中(就像原子设置值一样)。请注意,不太可能会遇到此错误,因为通常您(或 FreeMarker)会创建一个与TemplateConfiguration.merge(TemplateConfiguration)
合并的TemplateConfiguration
,然后将其应用于新模板。 -
已从二进制文件(
freemarker.jar
)中删除了 FindBugs@SuppressFBWarnings
Comments,因为它们在使用 Gradle 编译依赖项目时已引起如下警告:“警告:无法在类型'SuppressFBWarnings'中找到 Comments 方法'value()'” -
Maven 源工件现在包含 JavaCC 生成的 Java 文件和
FTL.jj
。