| <!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.1 - 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.1"> |
| <meta property="og:locale" content="en_US"> |
| <meta property="og:url" content="https://freemarker.apache.org/docs/versions_2_1.html"> |
| <link rel="canonical" href="https://freemarker.apache.org/docs/versions_2_1.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_1.html"><span itemprop="name">2.1</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.1"];</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_1_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_01.html"><span>Next</span></a></div><div class="title-wrapper"> |
| <h1 class="content-header header-section1" id="versions_2_1" itemprop="headline">2.1</h1> |
| </div></div><div class="page-menu"> |
| <div class="page-menu-title">Page Contents</div> |
| <ul><li><a class="page-menu-link" href="#autoid_285" data-menu-target="autoid_285">Changes in FTL (FreeMarker Template Language)</a></li><li><a class="page-menu-link" href="#autoid_286" data-menu-target="autoid_286">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_287" data-menu-target="autoid_287">Other changes</a></li><li><a class="page-menu-link" href="#autoid_288" data-menu-target="autoid_288">Differences between the RC1 and final release</a></li></ul> </div><p>Date of release: 2002-10-17</p><p>Templates and the Java API are <em>not</em> fully |
| compatible with 2.0 releases. You will need to revisit existing code |
| and templates, or use 2.1 for new projects only. Sorry for this |
| inconvenience; FreeMarker has undergone some revolutionary changes |
| since the 1.x series. We hope things will soon be sufficiently mature |
| for us to offer (almost) backward-compatible releases. Note that there |
| is a backward-compatibility flag that can be set via |
| <code class="inline-code">Configuration.setClassicCompatible(true)</code> that |
| causes the new FreeMarker to emulate most of FreeMarker 1.x's |
| quirks.</p> |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_285">Changes in FTL (FreeMarker Template Language)</h2> |
| |
| |
| <ul> |
| <li> |
| <p>More strict, reveals accidental mistakes in the templates, |
| prevents showing incorrect information when something went |
| wrong:</p> |
| |
| <ul> |
| <li> |
| <p>An attempt to access an undefined variable causes an |
| error and aborts template processing (by default at least; |
| see later). In earlier versions undefined variables were |
| silently treated as empty (zero-length) strings. However, |
| you can handle undefined variables in the template with some |
| new built-ins. For example, |
| <code class="inline-code">${foo?if_exists}</code> is equivalent with the |
| <code class="inline-code">${foo}</code> of earlier versions. Another way |
| of looking at this is that null values no longer exist from |
| the viewpoint of a template designer. Anything referenced |
| must be a defined variable.</p> |
| |
| <p>Note however that the programmer can configure |
| FreeMarker so that it ignores certain errors (say, undefined |
| variables), and continues template processing by skipping |
| the problematic part. This "loose" policy |
| should be used only for sites that don't show critical |
| information.</p> |
| </li> |
| |
| <li> |
| <p>New variable type: <a href="gloss.html#gloss.boolean">boolean</a>. Conditions in |
| <code class="inline-code">if</code>/<code class="inline-code">elseif</code> and operands |
| of logical operators (<code class="inline-code">&&</code>, |
| <code class="inline-code">||</code>, <code class="inline-code">!</code>) must be |
| booleans. Empty strings are no longer treated as a logical |
| false.</p> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <p>Local and global variables. More info: <a href="dgui_misc_var.html">Template Author's Guide/Miscellaneous/Defining variables in the template</a></p> |
| |
| <ul> |
| <li> |
| <p>Local variables for macros. You can create/replace |
| local variables in macro definition bodies with the <a href="ref_directive_local.html#ref.directive.local"><code>local</code> |
| directive</a></p> |
| </li> |
| |
| <li> |
| <p>You can create/replace global (non-local) variables |
| with the <a href="ref_directive_global.html#ref.directive.global"><code>global</code> |
| directive</a></p> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <p>The <a href="ref_directive_include.html#ref.directive.include"><code>include</code></a> |
| directive now by default treats the passed filename as being |
| relative to the including template's path. To specify absolute |
| template paths, you now have to prepend them with a |
| slash.</p> |
| </li> |
| |
| <li> |
| <p>The <a href="ref_directive_include.html#ref.directive.include"><code>include</code></a> |
| directive can now use the <em>acquisition |
| algorithm</em> (familiar from the Zope system) to look up |
| the template to include. Basically, if a template is not found |
| where it is looked up first, it is looked up in parent |
| directories. This is however not a default behavior, rather it |
| is triggered by a new syntactic element.</p> |
| </li> |
| |
| <li> |
| <p>Strict syntax mode: Allows you to generate arbitrary SGML |
| (XML) without worrying about clashes with FreeMarker directives. |
| For more information read: <a href="ref_depr_oldsyntax.html">Template Language Reference/Deprecated FTL constructs/Old FTL syntax</a></p> |
| </li> |
| |
| <li> |
| <p>Terse comments: you can use <code class="inline-code"><#-- |
| <em class="code-color">...</em> --></code> instead of |
| <code class="inline-code"><comment><em class="code-color">...</em></comment></code></p> |
| </li> |
| |
| <li> |
| <p>Directive that you can use to change the locale (and other |
| settings) inside the template: <a href="ref_directive_setting.html#ref.directive.setting"><code>setting</code></a></p> |
| </li> |
| |
| <li> |
| <p>Directive to explicitly flush the output buffer: <a href="ref_directive_flush.html#ref.directive.flush"><code>flush</code></a></p> |
| </li> |
| |
| <li> |
| <p>The top-level (root) hash is available via the variable |
| <code class="inline-code">root</code>, which is now a reserved name.</p> |
| </li> |
| |
| <li> |
| <p>The misnamed <code class="inline-code">function</code> directive has |
| been renamed to <code class="inline-code">macro</code>.</p> |
| </li> |
| |
| <li> |
| <p>String literals support various new <a href="dgui_template_exp.html#topic.escapeSequence">escape sequences</a>, |
| including UNICODE escapes |
| (<code class="inline-code">\x<em class="code-color">CODE</em></code>)</p> |
| </li> |
| |
| <li> |
| <p>The <a href="ref_directive_compress.html#ref.directive.compress"><code>compress</code></a> |
| directive is now more conservative in removing line |
| breaks.</p> |
| </li> |
| |
| <li> |
| <p>Built-in to capitalize the first word: <a href="ref_builtins_string.html#ref_builtin_cap_first"><code>cap_first</code></a></p> |
| </li> |
| |
| <li> |
| <p>Built-in to generate on-the-fly templates: <a href="ref_builtins_expert.html#ref_builtin_interpret"><code>interpret</code></a></p> |
| </li> |
| |
| <li> |
| <p><a href="ref_directive_stop.html#ref.directive.stop"><code>stop</code></a> |
| directive has an optional parameter to describe the reason of |
| termination</p> |
| </li> |
| |
| <li> |
| <p>Better error messages.</p> |
| </li> |
| |
| <li> |
| <p>New variable type: date. <em>Date support is |
| experimental. It can change substantially in the future. Keep |
| this in mind if you use it.</em></p> |
| </li> |
| </ul> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_286">Changes on the Java side</h2> |
| |
| |
| <ul> |
| <li> |
| <p><code class="inline-code">ObjectWrapper</code>: You can put |
| non-<code class="inline-code">TemplateModel</code> objects directly into |
| hashes, sequences and collections, and they will be |
| automatically wrapped with the appropriate |
| <code class="inline-code">TemplateModel</code> implementation. The API of |
| objects that are exposed to templates |
| (<code class="inline-code">Simple<em class="code-color">XXX</em></code>) has |
| been changed according to this, for example in |
| <code class="inline-code">SimpleHash</code> the old <code class="inline-code">put(String key, |
| TemplateModel value)</code> is now <code class="inline-code">put(String key, |
| Object object)</code>. Also, you can pass any kind of object |
| as data-model to <code class="inline-code">Template.process</code>. The |
| alternative reflection based <code class="inline-code">ObjectWrapper</code> |
| can expose the members of any Java object automatically for the |
| designer. More information: <a href="pgui_datamodel_objectWrapper.html">Object wrapping</a>, |
| <a href="pgui_misc_beanwrapper.html">Bean wrapper</a>, <a href="pgui_misc_jythonwrapper.html">Jython wrapper</a>.</p> |
| </li> |
| |
| <li> |
| <p>The <code class="inline-code">Configuration</code> object was introduced |
| as a central point to hold all your FreeMarker-related global |
| settings, as well as commonly used variables that you want to |
| have available from any template. Also it encapsulates the |
| template cache and can be used to load templates. For more |
| information read <a href="pgui_config.html">Programmer's Guide/The Configuration</a>.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">TemplateLoader</code>: pluggable template |
| loader, separates caching from template loading</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">TemplateNumberModel</code>-s do not control |
| their formatting anymore. They just store the data (i.e. a |
| number). Number formatting is done by the FreeMarker core based |
| on the <code class="inline-code">locale</code> and |
| <code class="inline-code">number_format</code> settings. This logic applies to |
| the new experimental date type as well.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">TemplateBooleanModel</code> introduced: Only |
| objects that implements this interface can be used as a boolean |
| in true/false conditions. More info: <a href="pgui_datamodel_scalar.html">Programmer's Guide/The Data Model/Scalars</a></p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">TemplateDateModel</code> introduced: objects |
| that implements this interface are recognized as dates and can |
| be locale-sensitively formatted. <em>Date support is |
| experimental in FreeMarker 2.1. It can change substantially in |
| the future. Keep this in mind if you use it.</em></p> |
| </li> |
| |
| <li> |
| <p>The <code class="inline-code">TemplateModelRoot</code> interface was |
| deprecated. As of FreeMarker 2.1, you can simply use any |
| instance of <code class="inline-code">TemplateHashModel</code> instead. This |
| actually is due to a significant architectural change. Variables |
| set or defined in a template are stored in a separate |
| <code class="inline-code">Environment</code> object that only exists while the |
| template is being rendered. Thus, the template doesn't modify |
| the root hash.</p> |
| </li> |
| |
| <li> |
| <p>Changes to transformations</p> |
| |
| <ul> |
| <li> |
| <p>Completely rewritten |
| <code class="inline-code">TemplateTransformModel</code> interface. More |
| flexible, and does not impose output holding. More |
| information: <a href="pgui_datamodel_directive.html">Programmer's Guide/The Data Model/Directives</a></p> |
| </li> |
| |
| <li> |
| <p>The <code class="inline-code">transform</code> directive now takes |
| an optional set of key/value pairs. <code class="inline-code"><transform |
| myTransform; |
| <em class="code-color">key1</em>=<em class="code-color">value1</em>, |
| <em class="code-color">key2</em>=<em class="code-color">value2</em> |
| <em class="code-color">...</em>></code>. More |
| information: <a href="ref_depr_transform.html#ref.directive.transform"><code>transform</code> |
| directive</a></p> |
| </li> |
| |
| <li> |
| <p>The transforms that ship with the FreeMarker core are |
| now available by default to all templates - i.e. |
| <code class="inline-code"><transform html_escape></code> will invoke |
| the |
| <code class="inline-code">freemarker.template.utility.HtmlEscape</code> |
| transform. More information: <a href="pgui_config_sharedvariables.html">Programmer's Guide/The Configuration/Shared variables</a></p> |
| </li> |
| </ul> |
| </li> |
| |
| <li> |
| <p>User-defined <code class="inline-code">TemplateModel</code> objects now |
| can access the runtime environment (read and set variables, get |
| the current locale, etc.) using an |
| <code class="inline-code">Environment</code> instance, which can be obtained |
| by the static |
| <code class="inline-code">Environment.getCurrentEnvironment()</code> method. |
| As a result, <code class="inline-code">TemplateScalarModel.getAsString</code> |
| has been changed: it has no locale parameter.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">TemplateExceptionHandler</code>-s make it |
| possible to define your own rules on what to do when a runtime |
| error occurs (e.g. accessing a non existing variable) during |
| template processing. For example, you can abort template |
| processing (recommended for most sites), or skip the problematic |
| statement and continue template processing (similar to old |
| behavior). DebugMode has been removed, use |
| <code class="inline-code">TemplateExceptionHandler.DEBUG_HANDLER</code> or |
| <code class="inline-code">HTML_DEBUG_HANDLER</code> instead.</p> |
| </li> |
| |
| <li> |
| <p>Logging: FreeMarker logs certain events (runtime errors |
| for example). For more information read <a href="pgui_misc_logging.html">Programmer's Guide/Miscellaneous/Logging</a>.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">SimpleIterator</code> was removed, but we |
| provide a <code class="inline-code">TemplateCollectionModel</code> |
| implementation: <code class="inline-code">SimpleCollection</code>.</p> |
| </li> |
| |
| <li> |
| <p>Arithmetic engine is pluggable |
| (<code class="inline-code">Configuration.setArithmeticEngine</code>). The core |
| distribution comes with two engines: |
| <code class="inline-code">ArithmeticEngine.BIGDECIMAL_ENGINE</code> (the |
| default) that converts all numbers to |
| <code class="inline-code">BigDecimal</code> and then operates on them, and |
| <code class="inline-code">ArithmeticEngine.CONSERVATIVE_ENGINE</code> that |
| uses (more-or-less) the widening conversions of Java language, |
| instead of converting everything to |
| <code class="inline-code">BigDecimal</code>.</p> |
| </li> |
| |
| <li> |
| <p>Changes to <code class="inline-code">freemarker.ext.beans</code> |
| package: The JavaBeans adapter layer has suffered several major |
| changes. First, <code class="inline-code">BeansWrapper</code> is no longer a |
| static utility class - you can now create instances of it, and |
| every instance can have its own instance caching policy and |
| security settings. These security settings are also new - you |
| can now create JavaBeans wrappers that hide methods that are |
| considered unsafe or inappropriate in a templating environment. |
| By default, you can no longer call methods like |
| <code class="inline-code">System.exit()</code> from the template (although you |
| can manually turn off these safeguards). The |
| <code class="inline-code">StaticModel</code> and |
| <code class="inline-code">StaticModels</code> classes are gone; their |
| functionality is now replaced with the |
| <code class="inline-code">BeansWrapper.getStaticModels()</code> method.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">freemarker.ext.jython</code> package: |
| FreeMarker can now directly use Jython objects as data-models |
| using the <a href="pgui_misc_jythonwrapper.html">Jython |
| wrapper</a>.</p> |
| </li> |
| |
| <li> |
| <p>Changes to <code class="inline-code">freemarker.ext.jdom</code> package: |
| The package now uses the <em>Jaxen</em> package |
| instead of its predecessor, the |
| <em>werken.xpath</em> package to evaluate XPath |
| expressions. Since <em>Jaxen</em> is a successor to |
| <em>werken.xpath</em>, this can be considered to be |
| an upgrade. As a consequence, namespace prefixes are now |
| recognized in XPath expressions and the overall XPath |
| conformance is better.</p> |
| </li> |
| |
| <li> |
| <p>Better error reporting: If the processing of a template is |
| aborted by a <code class="inline-code">TemplateException</code> being thrown, |
| or using a <code class="inline-code"><#stop></code> directive, |
| FreeMarker will now output an execution trace with line and |
| column numbers relative to the template source.</p> |
| </li> |
| |
| <li> |
| <p>The output is written to a simple |
| <code class="inline-code">Writer</code>; no more |
| <code class="inline-code">PrintWriter</code>. This redesign causes FreeMarker |
| to no longer swallow <code class="inline-code">IOException</code>s during |
| template processing.</p> |
| </li> |
| |
| <li> |
| <p>Various API cleanups, primarily the removing of |
| superfluous constructor and method overloads.</p> |
| </li> |
| </ul> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_287">Other changes</h2> |
| |
| |
| <ul> |
| <li> |
| <p>Documentation has been rewritten from scratch</p> |
| </li> |
| </ul> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_288">Differences between the RC1 and final release</h2> |
| |
| |
| <ul> |
| <li> |
| <p>Added the support for date models and locale-sensitive |
| date formatting. <em>Date support is experimental in |
| FreeMarker 2.1. It can change substantially in the future. Keep |
| this in mind if you use it.</em></p> |
| </li> |
| |
| <li> |
| <p>Added the <code class="inline-code">default</code> built-in which makes |
| it possible to specify default values for undefined |
| expressions.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">SimpleIterator</code> has been removed, |
| <code class="inline-code">SimpleCollection</code> has been introduced</p> |
| </li> |
| |
| <li> |
| <p>Arithmetic engine is pluggable. The core now contains two |
| arithmetic engines: |
| <code class="inline-code">ArithmeticEngine.BIGDECIMAL_ENGINE</code> and |
| <code class="inline-code">ArithmeticEngine.CONSERVATIVE_ENGINE</code>.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">BeansWrapper</code> supports a new exposure |
| level: <code class="inline-code">EXPOSE_NOTHING</code></p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">Constants</code> interface was removed. |
| <code class="inline-code"><em class="code-color">...</em>_WRAPPER</code> |
| constants have been moved from <code class="inline-code">Constants</code> to |
| <code class="inline-code">ObjectWrapper</code>, |
| <code class="inline-code">EMPTY_STRING</code> constant was moved to |
| <code class="inline-code">TemplateScalarModel</code>, |
| <code class="inline-code">NOTHING</code> constant was moved to |
| <code class="inline-code">TemplateModel</code>, <code class="inline-code">TRUE</code> and |
| <code class="inline-code">FALSE</code> constants were moved to |
| <code class="inline-code">TemplateBooleanModel</code>.</p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">JAVABEANS_WRAPPER</code> was renamed to |
| <code class="inline-code">BEANS_WRAPPER</code></p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">Configuration.get</code> and |
| <code class="inline-code">put</code>, <code class="inline-code">putAll</code> were renamed |
| to <code class="inline-code">getSharedVariable</code> and |
| <code class="inline-code">setSharedVariable</code>, |
| <code class="inline-code">setAllSharedVariables</code></p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">Configuration.getClassicCompatibility</code>, |
| <code class="inline-code">setClassicCompatibility</code> were renamed to |
| <code class="inline-code">isClassicCompatible</code>, |
| <code class="inline-code">setClassicCompatible</code></p> |
| </li> |
| |
| <li> |
| <p><code class="inline-code">Template.process</code> method overloads with |
| <code class="inline-code">useReflection</code> parameter was removed. But now |
| we have <code class="inline-code">setObjectWrapper</code> method in the |
| <code class="inline-code">Configuration</code>, so you can set the preferred |
| root-object wrapper there.</p> |
| </li> |
| |
| <li> |
| <p>Some superfluous method overloads were removed; these |
| changes are backward compatible with RC1</p> |
| </li> |
| |
| <li> |
| <p>Various minor JavaDoc and Manual improvements</p> |
| </li> |
| |
| <li> |
| <p>Bugfix: <code class="inline-code">include</code> directive has |
| calculated the base path of relative paths wrongly</p> |
| </li> |
| |
| <li> |
| <p>Bugfix: We have accidentally used a J2SE 1.3 class, but |
| FreeMarker 2.1 must able to run on J2SE 1.2</p> |
| </li> |
| </ul> |
| <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_01.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> |