| <!doctype html> |
| <!-- Generated by FreeMarker/Docgen from DocBook --> |
| <html lang="en" class="page-type-section"> |
| <head prefix="og: http://ogp.me/ns#"> |
| <meta charset="utf-8"> |
| <title>2.3.31 - Apache FreeMarker Manual</title> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <meta name="format-detection" content="telephone=no"> |
| <meta property="og:site_name" content="Apache FreeMarker Manual"> |
| <meta property="og:title" content="2.3.31"> |
| <meta property="og:locale" content="en_US"> |
| <meta property="og:url" content="https://freemarker.apache.org/docs/versions_2_3_31.html"> |
| <link rel="canonical" href="https://freemarker.apache.org/docs/versions_2_3_31.html"> |
| <link rel="icon" href="favicon.png" type="image/png"> |
| <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono"> |
| <link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1707770044859"> |
| <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cookie-bar/cookiebar-latest.min.js"></script> |
| </head> |
| <body itemscope itemtype="https://schema.org/Code"> |
| <meta itemprop="url" content="https://freemarker.apache.org/docs/"> |
| <meta itemprop="name" content="Apache FreeMarker Manual"> |
| |
| <!--[if lte IE 9]> |
| <div class="oldBrowserWarning" style="display: block"> |
| Unsupported web browser - Use a modern browser to view this website! |
| </div> |
| <![endif]--> <div class="oldBrowserWarning"> |
| Unsupported web browser - Use a modern browser to view this website! |
| </div> |
| <div class="header-top-bg"><div class="site-width header-top"><div id="hamburger-menu" role="button"></div> <div class="logo"> |
| <a href="https://freemarker.apache.org" role="banner"><img itemprop="image" src="logo.png" alt="FreeMarker"></a> </div> |
| <ul class="tabs"><li><a href="https://freemarker.apache.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="https://freemarker.apache.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/projects/FREEMARKER" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="https://freemarker.apache.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="search-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"> <div class="breadcrumbs"> |
| <ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_31.html"><span itemprop="name">2.3.31</span></a></li></ul> </div> |
| <div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width"> |
| <div class="content-wrapper"> |
| <div id="table-of-contents-wrapper" class="col-left"> |
| <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.31"];</script> |
| <script src="toc.js?1707770044859"></script> |
| <script src="docgen-resources/main.min.js?1707770044859"></script> |
| </div> |
| <div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_32.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_30.html"><span>Next</span></a></div><div class="title-wrapper"> |
| <h1 class="content-header header-section1" id="versions_2_3_31" itemprop="headline">2.3.31</h1> |
| </div></div><div class="page-menu"> |
| <div class="page-menu-title">Page Contents</div> |
| <ul><li><a class="page-menu-link" href="#autoid_152" data-menu-target="autoid_152">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_153" data-menu-target="autoid_153">Changes on the Java side</a></li></ul> </div><p>Release date: 2021-02-16</p> |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_152">Changes on the FTL side</h2> |
| |
| |
| <ul> |
| <li> |
| <p>Added <code class="inline-code">?eval_json</code> to evaluate JSON given |
| as flat string. This was added as <code class="inline-code">?eval</code> is |
| routinely misused for the same purpose, which not only doesn't |
| work for all JSON-s, but can be a security problem. <a href="ref_builtins_expert.html#ref_builtin_eval_json">See more here...</a></p> |
| </li> |
| |
| <li> |
| <p>Added new special variable, <code class="inline-code">time_zone</code> |
| (referred like <code class="inline-code">.time_zone</code>, like all special |
| variables), to retrieve the current value of the |
| <code class="inline-code">time_zone</code> setting as a string.</p> |
| </li> |
| |
| <li> |
| <p>Allowed escaping <code class="inline-code">#</code> with backlash in |
| identifier names (not in string), as it used to occur in |
| database column names. Like if you have a column name like |
| <code class="inline-code">#users</code>, you can refer to it as |
| <code class="inline-code">row.\#users</code>. (Alternatively, |
| <code class="inline-code">row['#users']</code> always worked, but is often |
| less convenient.)</p> |
| </li> |
| |
| <li> |
| <p><a href="https://issues.apache.org/jira/projects/FREEMARKER/issues/FREEMARKER-169">FREEMARKER-169</a>: |
| Fixed bug that made <code class="inline-code">?c</code> and |
| "computer" number format inconsistent. If <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set"><code>incomplatible_improvements</code></a> |
| is set to 2.3.31 (or higher), when you set the |
| <code class="inline-code">number_format</code> setting to |
| <code class="inline-code">computer</code> (or you call |
| <code class="inline-code">Environment.getCNumberFormat()</code>), the format |
| now matches the behavior of <code class="inline-code">?c</code>, when |
| formatting infinite (positive and negative), and NaN. Matching |
| the behavior of <code class="inline-code">?c</code> was always the intent, but |
| before this incompatible improvement, the |
| <code class="inline-code">computer</code> format always behaved like |
| <code class="inline-code">?c</code> before incompatible improvements 2.3.21, |
| where instead of "INF", and "NaN", the |
| results used Unicode characters U+221E, and U+FFFD.</p> |
| </li> |
| |
| <li> |
| <p>Fixed bug where <code class="inline-code">.globals</code> weren't seen |
| as namesapce, so something like <code class="inline-code"><#assign |
| <em class="code-color">name</em> = |
| <em class="code-color">value</em> in .globals></code> |
| failed (although you should use <code class="inline-code"><#global |
| <em class="code-color">name</em> = |
| <em class="code-color">value</em>></code> instead |
| anyway).</p> |
| </li> |
| </ul> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_153">Changes on the Java side</h2> |
| |
| |
| <ul> |
| <li> |
| <p>More helpful parser error messages for nesting problems |
| (caused by missed or malformed end-tags usually).</p> |
| </li> |
| |
| <li> |
| <p>Added <code class="inline-code">DOMNodeSupport</code> and |
| <code class="inline-code">JythonSupport</code> <code class="inline-code">boolean</code> |
| properties to <code class="inline-code">DefaultObjectWrapper</code>. This |
| allows disabling the special wrapping of DOM nodes and Jython |
| classes. This might be desirable <a href="app_faq.html#faq_template_uploading_security">for security |
| reasons</a>.</p> |
| </li> |
| |
| <li> |
| <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-145">FREEMARKER-145</a>: |
| Fixed bug where methods with "overloaded" return type may become |
| inaccessible on Java 9+, if some overriding subclasses are not |
| public. (This is because |
| <code class="inline-code">java.beans.Introspector</code> behavior has changed |
| with Java 9.)</p> |
| </li> |
| |
| <li> |
| <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-133">FREEMARKER-133</a>: |
| Fixed bug where FreeMarker sometimes tries to expose public |
| methods that are defined or overridden in a non-public class, if |
| the non-public class was then extended by a public class. |
| Calling such method just ends up with |
| <code class="inline-code">IllegalAccessException</code>, but they shouldn't be |
| exposed on the first place. Furthermore, such a wrong method |
| sometimes replaces the good version of the method, which would |
| be callable. When this glitch happens is somewhat unpredictable, |
| as it also depends on what methods |
| <code class="inline-code">java.beans.Introspector</code> exposes (which at |
| very least can depend on the Java version), and in what |
| order.</p> |
| </li> |
| |
| <li> |
| <p>Fixed bug where OSGi |
| <code class="inline-code">Bundle-RequiredExecutionEnvironment</code> in |
| <code class="inline-code">META-INF/MANIFEST.FM</code> has incorrectly |
| contained JavaSE-1.6, J2SE-1.5</p> |
| </li> |
| |
| <li> |
| <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-159">FREEMARKER-159</a>: |
| Set <code class="inline-code">Automatic-Module-Name</code> to |
| <code class="inline-code">freemarker</code> in |
| <code class="inline-code">META-INF/MANIFEST.FM</code>. In most cases this was |
| the deduced Java 9 module name earlier, but that was fragile, as |
| Java has deduced it from the jar file name.</p> |
| </li> |
| |
| <li> |
| <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-165">FREEMARKER-165</a>: |
| Fixed bug where where if the namespace expression in a block |
| assignment (like <code class="inline-code"><#assign |
| <em class="code-color">x</em> in |
| <em class="code-color">someNamespace</em>><em class="code-color">...</em></#assign></code>) |
| refers to a missing variable, or has the wrong type, FreeMarker |
| has thrown <code class="inline-code">NullPointerException</code> or |
| <code class="inline-code">ClassCastException</code>, instead of |
| <code class="inline-code">InvalidReferenceException</code> and |
| <code class="inline-code">NonNamespaceException</code> with proper helpful |
| message.</p> |
| </li> |
| |
| <li> |
| <p>Build related changes:</p> |
| |
| <ul> |
| <li> |
| <p>Simplified the way Apache Ivy is used in our Ant |
| build. It's now used on the standard way, there's no |
| <code class="inline-code">ant update-deps</code> anymore.</p> |
| </li> |
| |
| <li> |
| <p>Test suite is now ran on ARM (64 bit) as well on CI |
| (Travis).</p> |
| </li> |
| |
| <li> |
| <p>FreeMarker Manual and web site now works much better |
| on mobile, because of developments in the Docgen |
| project.</p> |
| </li> |
| |
| <li> |
| <p>Docgen is now a Maven project, and so a plain Maven |
| dependency of the other projects (although, it's still only |
| in the Apache Snapshot Repository, not in Central yet). With |
| this we could get rid of our Ivy repository.</p> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_32.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_30.html"><span>Next</span></a></div></div></div></div> </div> |
| </div> |
| <div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="https://freemarker.apache.org/">What is FreeMarker?</a></li><li><a href="https://freemarker.apache.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="app_faq.html">FAQ</a></li><li><a itemprop="license" href="app_license.html">License</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy policy</a></li></ul></div><div class="column"><h3 class="column-header">Often used / Reference</h3><ul><li><a href="https://try.freemarker.apache.org/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li><li><a href="api/freemarker/core/Configurable.html#setSetting-java.lang.String-java.lang.String-">Configuration settings</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href="https://github.com/apache/freemarker">Github project page</a></li><li><a href="https://issues.apache.org/jira/projects/FREEMARKER">Report a bug</a></li><li><a href="https://freemarker.apache.org/report-security-vulnerabilities.html">Report security vulnerability</a></li><li><a href="https://stackoverflow.com/questions/ask?tags=freemarker">Get help on StackOverflow</a></li><li><a href="https://twitter.com/freemarker">Announcements on Twitter</a></li><li><a href="https://freemarker.apache.org/mailing-lists.html">Discuss on mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/apache/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="https://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated"> |
| Last generated: |
| <time itemprop="dateModified" datetime="2024-02-12T20:34:04Z" title="Monday, February 12, 2024 at 8:34:04 PM Greenwich Mean Time">2024-02-12 20:34:04 GMT</time>, for Freemarker 2.3.32 </p> |
| <p class="copyright"> |
| © <span itemprop="copyrightYear">1999</span>–2024 |
| <a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="https://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners. </p> |
| </div></div></div></body> |
| </html> |