2.3.30

Page Contents

发布日期:2020-03-05

请注意,使用此版本,最低要求的 Java 版本从 Java 5 增加到 Java 7.

FTL 方面的更改

  • FREEMARKER-107:添加了?with_args(dynamicArguments)?with_args_last(dynamicArguments)以将参数动态添加到指令(如宏),函数和方法调用。实际上,此内置函数返回的指令,宏或函数具有不同的参数默认值。 在这里查看更多...

  • FREEMARKER-107:添加了新的特殊变量.args。这将计算为宏中的哈希值,以及包含所有参数的函数中的序列。这对于统一作用于所有参数的操作很有用,例如将参数传递给?with_args(...)

  • 宏全部捕获参数(也称为 varargs 参数)现在按名称(而不是按位置)传递捕获参数时,现在保留参数的原始 Sequences。之前的 Sequences 是不可预测的。

  • 错误修正:在<#escape placeholder as escExpression>中,escExpression内的 lambda 表达式未替换placeholder。幸运的是,几乎没有人想在那里使用 lambda(鉴于少数接受 lambda 的内置插件)。

Java 方面的更改

  • 所需的最低 Java 版本从 Java 5 增加到 Java 7.

  • FREEMARKER-124:使得对类成员的默认过滤更加严格(当您使用BeansWrapper或其子类(如DefaultObjectWrapper时))。这不是严格的向后兼容,但不可能破坏任何实际应用。请参见src/main/resources/freemarker/ext/beans/DefaultMemberAccessPolicy-rules,以查看更改了什么。出于安全原因进行了此更改,但是如果不受信任的用户编辑模板,则默认行为将永远不够安全。参见在常见问题中。在极少数情况下,此更改会破坏您的应用程序,然后您仍然可以通过将对象包装的memberAccessPolicy属性设置为LegacyDefaultMemberAccessPolicy.INSTANCE来使用旧行为。

  • BeansWrapper添加了freemarker.ext.beans.MemberAccessPolicy接口和memberAccessPolicy属性,以及DefaultObjectWrapper之类的子类。这使用户可以实现自己的程序逻辑,以决定将哪些类的成员公开给模板。有关更多详细信息,请参见FreeMarker Java API 文档

  • 添加了freemarker.ext.beans.WhitelistMemberAccessPolicy,这是MemberAccessPolicy,用于您希望允许编辑模板的用户,这些用户不应具有与开发者相同的权限(与 Java 应用程序具有相同的权限)。较早之前,唯一可用的解决方案是SimpleObjectWrapper,但这对于使用 FreeMarker 的大多数应用程序来说过于严格。 WhitelistMemberAccessPolicyDefaultObjectWrapper(或任何其他BeansWrapper)一起使用,允许您使用它的所有功能,但是它将仅允许访问开发人员明确列出或用@TemplateAccessibleComments 的成员。

  • FREEMARKER-125:FreeMarker 现在可以使用DecimalFormatSymbolsProvider SPI 提供的DecimalFormatSymbols。如果您需要更改 Java 为语言环境提供的十进制格式符号,这将很有用。

  • FREEMARKER-120BeansWrapper(以及DefaultObjectWrapper的子类)现在具有两个受保护的方法,可以重写这些方法来监视成员的访问:invokeMethodreadField

  • incompatibleImprovements设置为Configuration.getVersion()返回的实例现在将被记录为错误,但是为了向后兼容它仍然可以工作。这适用于ConfigurationDefaultObjectWrapperBeansWrapper的所述设置。典型的错误模式是:new Configuration(Configuration.getVersion())。这样做会破坏incompatibleImprovements的目的,并使 FreeMarker 升级成为潜在的重大更改。此外,从 2.4.0 版开始可能不允许这样做,并且会引发异常。因此,如果您的应用程序中存在上述错误,则应通过将incompatibleImprovements设置为已知与该应用程序兼容的最高具体版本来解决。

  • 添加了Environment.getDataModelOrSharedVariable(String)

  • 错误修复:AST 遍历 API 现在可以正确遍历 lambda 表达式的内部(例如参数列表)

  • 添加了一个新的SimpleHash构造函数,调用者可以在其中提供Map实例用作后备存储,从而可以控制其排序及其其他技术方面(例如初始容量)。