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?sizeseq[index]seq[range]以及其他一些内置组件(filtermapjoin等)协作,以尽可能地将所有元素收集到内存中。例如,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 != 0seq?size < 1)进行比较,并确定答案,就足以知道seq是否为空(即,不需要确切的大小) ,并且seq实现TemplateCollectionModelEx,FreeMarker 将调用TemplateCollectionModelEx.isEmpty()而不是size()。此外,如果seq?filter的结果,或者是可以提供延迟生成结果的类似内置函数的结果,它将进行计数以找出大小(而不是在内存中构造整个序列),并将限制它的长度根据与?size的结果进行比较的字面量进行计数。

  • 添加了TemplateModelUtils.wrapAsHashUnion(ObjectWrapper, List<?>)wrapAsHashUnion(ObjectWrapper, Object...),当您要以某种方式组成多个对象的数据模型时,它们的条目(Map键-值对,bean 属性等)一起出现在数据的顶层时,这很有用。模型。

  • HTMLOutputFormatXMLOutputFormatXHTMLOutputFormat不再是最终类,而且XHTMLOutputFormat现在扩展了XMLOutputFormat。相应的TemplateOutputModel -s 也适用(TemplateHTMLOutputModel不再是最终的,依此类推)。这允许定义新的自定义标记输出格式类,这些类将与仅为标准标记输出格式准备的程序逻辑一起使用,因为instanceof SomeStandardOutputFromat将为其返回true

  • 使用字符串值(例如.properties文件)配置 FreeMarker 时,在支持“对象生成器”语法的设置中,现在可以使用新的markup函数(例如markup(HTMLOutputFormat(), "<p>Example</p>"))创建TemplateMarkupOutputModel值。

  • BeansWrapper.clearClassIntrospecitonCache已被弃用,因为方法名称中有错字;请改用clearClassIntrospectionCache