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>,其中kv是哈希的键-值对中的键和值。

Java 方面的更改

  • 添加了用于扩展TemplateModelHashExTemplateModelHashEx2接口,该接口使用一种列出哈希键值对内容的方法。 (这是list directive的新哈希列表功能所利用的,但是如果所有键都是字符串,则不需要此功能。)

  • 延迟导入:使用新的布尔设置lazy_importslazy_auto_imports,您可以使导入(如<#import "lib/utils.ftl" as u>)和/或自动导入成为惰性。懒惰地导入时,将像以前一样立即创建名称空间变量(在此示例中为u),但是只有在(如果有的话)访问导入的名称空间的内容时,才会加载和处理导入的模板。它的主要应用是自动导入,在这种情况下,您不需要导入模板中实际未使用的模板的开销。 (此外,添加了新的Environment.importLib方法重载,您可以在其中指定是延迟导入还是急切导入.)这些新设置可以在ConfigurationTemplate(TemplateConfiguration)和Environment级别上进行设置。

  • 现在可以在每个模板的基础上设置auto_importauto_include设置(例如具有特定名称模式的模板具有不同的自动导入)。现在可以实现,因为这些设置已从Configuration级别降低到更通用的Configurable级别,因此也被TemplateConfigurationEnvironment继承。

  • 新的Configuration(和TemplateConfiguration)设置tab_size。这仅影响错误消息中报告的列号的计算方式(以及其他 API 可用的列号)。它不会影响模板的输出。默认为 8.

  • DefaultObjectWrapper(和DefaultObjectWrapperBuilder)添加了新设置:iterableSupport。当您不能对仅实现 Java 5 java.lang.Iterable(不要与Iterator混淆)但不能实现Collection的值不能使用#list(或?has_next等)时,此问题得以解决。默认情况下未启用此功能,因为它与某些现有模板不兼容,通常是因为它们已在模板中使用someIterable.iterator()作为解决方法。启用此功能后,Iterable对象将不再被 FreeMarker 视为通用 Java 对象,因此,与Collection -s 一样,其 API 也不会公开给模板(当然,通过?api除外)。

  • 添加了Configurable.getCustomNumberFormatsWithoutFallbackConfigurable.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 @SuppressFBWarningsComments,因为它们在使用 Gradle 编译依赖项目时已引起如下警告:“警告:无法在类型'SuppressFBWarnings'中找到 Comments 方法'value()'”

  • Maven 源工件现在包含 JavaCC 生成的 Java 文件和FTL.jj