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 的大多数应用程序来说过于严格。WhitelistMemberAccessPolicy
与DefaultObjectWrapper
(或任何其他BeansWrapper
)一起使用,允许您使用它的所有功能,但是它将仅允许访问开发人员明确列出或用@TemplateAccessible
Comments 的成员。 -
FREEMARKER-125:FreeMarker 现在可以使用
DecimalFormatSymbolsProvider
SPI 提供的DecimalFormatSymbols
。如果您需要更改 Java 为语言环境提供的十进制格式符号,这将很有用。 -
FREEMARKER-120:
BeansWrapper
(以及DefaultObjectWrapper
的子类)现在具有两个受保护的方法,可以重写这些方法来监视成员的访问:invokeMethod
和readField
。 -
将
incompatibleImprovements
设置为Configuration.getVersion()
返回的实例现在将被记录为错误,但是为了向后兼容它仍然可以工作。这适用于Configuration
,DefaultObjectWrapper
和BeansWrapper
的所述设置。典型的错误模式是:new Configuration(Configuration.getVersion())
。这样做会破坏incompatibleImprovements
的目的,并使 FreeMarker 升级成为潜在的重大更改。此外,从 2.4.0 版开始可能不允许这样做,并且会引发异常。因此,如果您的应用程序中存在上述错误,则应通过将incompatibleImprovements
设置为已知与该应用程序兼容的最高具体版本来解决。 -
添加了
Environment.getDataModelOrSharedVariable(String)
。 -
错误修复:AST 遍历 API 现在可以正确遍历 lambda 表达式的内部(例如参数列表)
-
添加了一个新的
SimpleHash
构造函数,调用者可以在其中提供Map
实例用作后备存储,从而可以控制其排序及其其他技术方面(例如初始容量)。