blob: feb518f55cf847a12b01d0f5228cdaa9c8eb18cc [file] [log] [blame]
<!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&#39;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[&#39;#users&#39;]</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&#39;t seen
as namesapce, so something like <code class="inline-code">&lt;#assign
<em class="code-color">name</em> =
<em class="code-color">value</em> in .globals&gt;</code>
failed (although you should use <code class="inline-code">&lt;#global
<em class="code-color">name</em> =
<em class="code-color">value</em>&gt;</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 &quot;overloaded&quot; 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&#39;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">&lt;#assign
<em class="code-color">x</em> in
<em class="code-color">someNamespace</em>&gt;<em class="code-color">...</em>&lt;/#assign&gt;</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&#39;s now used on the standard way, there&#39;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&#39;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>