On this page
2.3.1
Page Contents
发布日期:2005-01-04
维护(具有一些重要的新功能)和错误修正版本。
可能的向后兼容性问题
如果在 FreeMarker 模板中使用 JSP 标记,则存在一个可能会影响 Web 应用程序行为的错误修正:FreeMarker 的javax.servlet.jsp.PageContext.getSession()实现不正确。 getSession()方法是一种方便的方法,自定义标记可通过该方法获取当前的HttpSession对象(如果没有会话,则为null)。到现在为止,如果会话不存在,那么它将自动创建它,因此它永远不会返回null。这是一个错误,因此从 2.3.1 开始,它从不创建会话,如果不存在则仅返回null。如果部分刷新页面后调用此方法,则旧的不正确行为可能导致页面渲染失败。但是要当心,旧的行为可能隐藏了 Web 应用程序的一些错误,从而忘记了创建会话的位置,因此使用新的正确行为,您可能会遇到由 Web 应用程序先前隐藏的错误引起的故障。 (创建会话是 MVC 控制器的任务,除非编写了需要会话的 JSP 标记,以便它自动创建它,但并不希望getSession()会这样做.)
FTL 方面的更改
- 全新内置:url。此内置可用于 URL 转义。但是请注意,要方便地使用此内置功能,封装 FreeMarker 的软件必须具有 2.3.1 意识(程序员将在下面找到更多信息...)。 
- 新的special variables: - output_encoding和- url_escaping_charset。但是请注意,要使用这些软件,封装 FreeMarker 的软件必须具有 2.3.1 意识(程序员将在下面找到更多信息...)。
- 序列的新内置函数:seq_contains,seq_index_of,seq_last_index_of。 
- 新指令:attempt/recover 
- js_string built-in现在以 - \>的身份转义了- >(以避免- </script>)。
- 内置 - sort和- sort_by现在可以按日期值排序。此外,对于任何级别的深度,内置的- sort_by现在都可以按子变量的子变量排序...等等。 (Details...)
- freemarker.template.TemplateExceptionHandler.HTML_DEBUG_HANDLER现在可以打印更多 HTML 上下文验证消息。
Java 方面的更改
- 新设置: - output_encoding。此设置用于通知 FreeMarker 有关封闭软件(作为 Web 应用程序框架)用于 FreeMarker 输出的字符集。默认情况下它是未定义的,尽管不是严格要求设置的,但随附的软件应该这样做。如果模板要使用新的- output_encoding特殊变量,并且可能要使用新的内置- url,则必须设置此设置。请注意,FreeMarker API 允许您分别为每个模板执行设置设置(请参见- Template.createProcessingEnvironment(...))。
- 新设置: - url_escaping_charset。当您使用新的内置- url进行 URL 转义时,这是用于计算转义部分(- %XX)的字符集。如果未设置,则- url内置值将使用- output_encoding设置的值,如果也未设置,则不能使用- url内置值(- ${foo?url})的无参数版本。
- 使用单例(静态) - Configuration实例显然是一个坏习惯,因此现在不赞成使用相关方法,并已对《手册》进行了调整,同时也更新了- FreemarkerXmlTask。
- 添加了 - freemarker.template.utility.Constants类,该类包含各种静态 final 字段,这些字段存储着常用的- TemplateModel常数,例如- EMPTY_SEQUENCE,- ZERO等。
- 将 - SecurityManager与 FreeMarker 一起使用时,访问系统属性可能会导致 AccessControlException。现在,将捕获此类异常并以警告级别对其进行记录,并返回该属性的默认值。
- 在某些情况下,现在从异常原因跟踪中删除了针 - InvocationTargetException。
- 添加了一个肮脏的 hack,尽管 - ServletException类编写得不好,但如果- TemplateException的直接原因是异常,它会在- TemplateException的堆栈跟踪中显示- ServletException根本原因。
- 错误修正:FreeMarker 的 - javax.servlet.jsp.PageContext.getSession()实现不正确。- getSession()方法是一种方便的方法,自定义标记可通过该方法获取当前的- HttpSession对象(如果没有会话,则为- null)。到现在为止,如果会话不存在,那么它将自动创建它,因此它永远不会返回- null。这是一个错误,因此从 2.3.1 开始,它从不创建会话,如果不存在则仅返回- null。如果部分刷新页面后调用此方法,则旧的不正确行为可能导致页面渲染失败。但是要当心,旧的行为可能隐藏了 Web 应用程序的一些错误,从而忘记了创建会话的位置,因此使用新的正确行为,您可能会遇到由 Web 应用程序先前隐藏的错误引起的故障。 (创建会话是 MVC 控制器的任务,除非编写了需要会话的 JSP 标记,以便它自动创建它,但并不希望- getSession()会这样做.)
- 错误修正:对于同时具有公共静态字段和相同名称的公共静态方法的 Java 类, - BeansWrapper并非总是能正确处理。
- 错误修正: - SimpleMethodModel有时会错误地传播异常,从而导致空指针异常。
- 错误修正:当您多次处理相同的 - Environment并在两次处理之间更改了设置时,模板执行可能会使用过期的缓存值。请注意,这仅在允许修改设置的单线程环境中可能发生。
- 错误修正:如果模板作者忘记指定必需的参数,则某些内置字符串会因 - IndexOutOfBounds异常而终止。现在他们死于更多有用的错误消息。
- 错误修正: - freemarker.ext.dom.NodeModel.equals(...)如果参数为- null,则死于空指针异常。
- 错误修正:在 J2SE 1.4 或更高版本中,有时在堆栈跟踪中将 - TemplateException-s 的原因异常打印了两次。
- 错误修正: - StringUtil.FTLStringLiteralEnc(String)方法已完成。
Other changes
- 手册和 JavaDoc API 中的修复和改进。
最终版本之前的发行记录
预览版本与最终版本之间的差异
- 添加了一个肮脏的 hack,尽管 - ServletException类编写得不好,但如果- TemplateException的直接原因是异常,它会在- TemplateException的堆栈跟踪中显示- ServletException根本原因。
- 错误修正: - freemarker.ext.dom.NodeModel.equals(...)如果参数为- null,则死于空指针异常。
- 错误修正:在 J2SE 1.4 或更高版本中,有时在堆栈跟踪中将 - TemplateException-s 的原因异常打印了两次。
- 手册中还有一些较小的改进。