2.3.29
Page Contents
发布日期:2019-08-17
FTL 方面的更改
-
添加了新的内置项:?filter(predicate),?map(mapper),?take_while(predicate),?drop_while(predicate)。这些允许使用 lambda 表达式,例如
users?filter(user -> user.superuser)
或users?map(user -> user.name)
,或者接受函数/方法作为参数。 Lambda 表达式在此发行版中也是新的,但是它们只能在所述内置程序中使用,因此它们与 Java 中的示例不同,而且,与类似的 Java 方法不同,这些内置程序也不是懒惰的。一般,仅在特定情况下(请参见here)。添加这些内置组件的主要目的是允许有条件地跳过list
指令中的元素,而不会嵌套if
-s,它们不会干扰sep directive和内置循环变量(请参见示例here)。 -
添加了用于截断文本的新内置函数。
string?truncate(length)
将文本截断为给定的长度,默认情况下,如果发生截断,则在末尾添加[...]
。截断发生在单词边界,除非结果太短,在这种情况下,它会退回到截断单词中间。还有?truncate_w
强制单词边界截断,还有?truncate_c
(对于字符边界)不关心单词边界。截断算法可插入 FreeMarker 配置中。有关更多详细信息,请参见the reference。 -
?sequence现在与
seq?size
,seq[index]
,seq[range]
以及其他一些内置组件(filter
,map
,join
等)协作,以尽可能地将所有元素收集到内存中。例如,anIterator?sequence[1]
现在仅获取前 2 个项目,而较早的时候它已经构建了一个包含所有元素的序列,只是从中获取第二个元素。或者,anIterator?sequence?size
现在只计算元素,而无需将其收集到内存中。有关更多详细信息,请参见the reference。 -
扩展的十进制格式参数“乘数”被错误地写为“乘数”。现在两个单词都可以识别了。
-
现在,将
?min
和?max
应用于正确的无界数字范围(如1..
)时,会立即错误停止,因为它将始终运行。
Java 方面的更改
-
FREEMARKER-109:在 JSP TLD-s 中,函数参数列表内的换行符导致
IllegalArgumentException
“无效的函数签名”。 -
FREEMARKER-104:如果没有可用的 XPath 实现,则更有用的日志和错误消息(尤其是,没有
NullPointerException
导致在 FreeMarker XPath 支持初始化期间记录异常),因为 Java 9 模块不允许访问com.sun
软件包下存储的内部 Xalan。 (如果需要 XPath 支持,消息现在建议添加 Apache Xalan 或 Jaxen 作为依赖项.) -
现在可以将
boolean_format
配置设置设置为"c"
。然后${aBoolean}
将表现为${aBoolean?c}
。仅当您生成仅用于非人(计算机)消费的输出时,才应使用此选项。如果您的输出也有适合人类 Listener 的作品,仍然建议使用${aBoolean?c}
,其中需要true
/false
输出,或者根本不设置boolean_format
,或者将其设置为适合日常用户的内容(例如"yes,no"
)。 -
新的配置设置
fallback_on_null_loop_variable
:指定读取null
(缺少)的循环变量(如<#list items as i>
或<@myMacro items; i>
中的i
)时的行为;如果true
,FreeMarker 将在更高的变量范围内查找具有相同名称的变量,或者如果false
则该变量将只是null
(丢失)。为了向后兼容,默认值为true
。新项目的建议值为false
,否则将新变量添加到更高范围(通常是到数据模型)可能会无意更改模板的行为。 -
如果将
seq?size
的结果与模板中的整数* literal *(例如seq?size != 0
或seq?size < 1
)进行比较,并确定答案,就足以知道seq
是否为空(即,不需要确切的大小) ,并且seq
实现TemplateCollectionModelEx
,FreeMarker 将调用TemplateCollectionModelEx.isEmpty()
而不是size()
。此外,如果seq
是?filter
的结果,或者是可以提供延迟生成结果的类似内置函数的结果,它将进行计数以找出大小(而不是在内存中构造整个序列),并将限制它的长度根据与?size
的结果进行比较的字面量进行计数。 -
添加了
TemplateModelUtils.wrapAsHashUnion(ObjectWrapper, List<?>)
和wrapAsHashUnion(ObjectWrapper, Object...)
,当您要以某种方式组成多个对象的数据模型时,它们的条目(Map
键-值对,bean 属性等)一起出现在数据的顶层时,这很有用。模型。 -
HTMLOutputFormat
,XMLOutputFormat
,XHTMLOutputFormat
不再是最终类,而且XHTMLOutputFormat
现在扩展了XMLOutputFormat
。相应的TemplateOutputModel
-s 也适用(TemplateHTMLOutputModel
不再是最终的,依此类推)。这允许定义新的自定义标记输出格式类,这些类将与仅为标准标记输出格式准备的程序逻辑一起使用,因为instanceof SomeStandardOutputFromat
将为其返回true
。 -
使用字符串值(例如
.properties
文件)配置 FreeMarker 时,在支持“对象生成器”语法的设置中,现在可以使用新的markup
函数(例如markup(HTMLOutputFormat(), "<p>Example</p>")
)创建TemplateMarkupOutputModel
值。 -
BeansWrapper.clearClassIntrospecitonCache
已被弃用,因为方法名称中有错字;请改用clearClassIntrospectionCache
。