blob: 0748997c6bf1fc8a556827537c3ecfbd165310f9 [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>include - 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="include">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="https://freemarker.apache.org/docs/ref_directive_include.html">
<link rel="canonical" href="https://freemarker.apache.org/docs/ref_directive_include.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="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_include.html"><span itemprop="name">include</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","Template Language Reference","Directive Reference","include"];</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="ref_directive_import.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_list.html"><span>Next</span></a></div><div class="title-wrapper">
<h1 class="content-header header-section1" id="ref_directive_include" itemprop="headline">include</h1>
</div></div><div class="page-menu">
<div class="page-menu-title">Page Contents</div>
<ul><li><a class="page-menu-link" href="#autoid_100" data-menu-target="autoid_100">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_101" data-menu-target="autoid_101">Description</a><ul><li><a class="page-menu-link" href="#ref_directive_include_acquisition" data-menu-target="ref_directive_include_acquisition">Using acquisition</a></li><li><a class="page-menu-link" href="#ref_directive_include_localized" data-menu-target="ref_directive_include_localized">Localized lookup</a></li><li><a class="page-menu-link" href="#topic.import_vs_include" data-menu-target="topic.import_vs_include">Why <code class="inline-code">import</code> should be used instead of
<code class="inline-code">include</code></a></li></ul></li></ul> </div><a name="ref.directive.include"></a>
<h2 class="content-header header-section2" id="autoid_100">Synopsis</h2>
<pre class="metaTemplate">
<code class="inline-code">&lt;#include <em class="code-color">path</em>&gt;</code>
or
<code class="inline-code">&lt;#include <em class="code-color">path</em> <em class="code-color">options</em>&gt;</code>
</pre>
<p>Where:</p>
<ul>
<li>
<code class="inline-code"><em class="code-color">path</em></code>: The
path of the file to include; an expression that evaluates to a
string. (With other words, it doesn&#39;t have to be a fixed string,
it can also be something like, for example,
<code class="inline-code">profile.baseDir + &quot;/menu.ftl&quot;</code>.)
</li>
<li>
<code class="inline-code"><em class="code-color">options</em></code>: One
or more of these:
<code class="inline-code">encoding=<em class="code-color">encoding</em></code>,
<code class="inline-code">parse=<em class="code-color">parse</em></code>
<ul>
<li>
<code class="inline-code"><em class="code-color">encoding</em></code>:
Expression evaluates to string
</li>
<li>
<code class="inline-code"><em class="code-color">parse</em></code>:
Expression evaluates to boolean (also accepts a few string
values for backward compatibility)
</li>
<li>
<code class="inline-code"><em class="code-color">ignore_missing</em></code>:
Expression evaluates to boolean
</li>
</ul>
</li>
</ul>
<h2 class="content-header header-section2" id="autoid_101">Description</h2>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p><em>Using <code class="inline-code">include</code> directive is
almost always a bad practice</em>, and you should consider
using <a href="ref_directive_import.html#ref.directive.import">the
<code>import</code> directive</a> instead! Even if using
<code class="inline-code">import</code> adds some verbosity, on the long run it
can pay off. See <a href="#topic.import_vs_include">the
reasons here...</a></p>
</div>
<p>You can use it to insert another FreeMarker template file
(specified by the <code class="inline-code"><em class="code-color">path</em></code>
parameter) into your template. The output from the included template
is inserted at the point where the <code class="inline-code">include</code> tag
occurs. The included file shares the variables with the including
template, similarly like if it was copy-pasted into it. The
<code class="inline-code">include</code> directive is not really replaced by the
content of the included file, instead it processes the included file
each time when FreeMarker reaches the <code class="inline-code">include</code>
directive in the course of template processing. So for example if
the <code class="inline-code">include</code> is inside a <code class="inline-code">list</code>
loop, you can specify different file names in each cycle.</p>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p>This directive is not be confused with the JSP (Servlet)
include, as it doesn&#39;t involve the Servlet container at all, just
processes another FreeMarker template, without &quot;leaving&quot;
FreeMarker. Regarding how to do a &quot;JSP include&quot; <a href="app_faq.html#faq_servlet_include">read this...</a></p>
</div>
<p>The <code class="inline-code"><em class="code-color">path</em></code>
parameter can be a relative path like <code class="inline-code">&quot;foo.ftl&quot;</code>
and <code class="inline-code">&quot;../foo.ftl&quot;</code>, or an absolute like
<code class="inline-code">&quot;/foo.ftl&quot;</code>. Relative paths are relative to the
directory of the template that contains the
<code class="inline-code">import</code> directive. Absolute paths are relative to
a base (often referred as the &#39;root directory of the templates&#39;)
that the programmer defines when he configures FreeMarker.</p>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p>This is different than the way it worked prior FreeMarker
2.1, where the path was always absolute. To preserve the old
behavior, enable the classic compatible mode in the
<code class="inline-code">Configuration</code> object.</p>
</div>
<p>Always use <code class="inline-code">/</code> (slash) to separate path
components, never <code class="inline-code">\</code> (backslash). Even if you are
loading templates from your local file system and it uses
backslashes (like under. Windows), use <code class="inline-code">/</code>.</p>
<p>Example:</p>
<p>Assume /common/copyright.ftl contains:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">Copyright 2001-2002 ${me}&lt;br&gt;
All rights reserved.</pre> </div>
<p>Then this:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#assign me = &quot;Juila Smith&quot;&gt;
&lt;h1&gt;Some test&lt;/h1&gt;
&lt;p&gt;Yeah.
&lt;hr&gt;
<strong>&lt;#include &quot;/common/copyright.ftl&quot;&gt;</strong></pre> </div>
<p>will output this:</p>
<div class="code-block role-output">
<div class="code-block-label">Output</div><pre class="code-block-body">&lt;h1&gt;Some test&lt;/h1&gt;
&lt;p&gt;Yeah.
&lt;hr&gt;
<strong>Copyright 2001-2002 Juila Smith
All rights reserved.</strong></pre> </div>
<p>The supported
<code class="inline-code"><em class="code-color">options</em></code> are:</p>
<ul>
<li>
<p><code class="inline-code">parse</code>: If it is
<code class="inline-code">true</code>, then the included file will be parsed
as FTL, otherwise the whole file will be considered as simple
text (i.e, no FreeMarker constructs will be searched in it). If
you omit this option, then it defaults to
<code class="inline-code">true</code>.</p>
</li>
<li>
<p><code class="inline-code">encoding</code>: The encoding (charset) of the
included template. You shouldn&#39;t use this option anymore; if
different template use different encodings, then the programmers
should associated the encoding to the templates via
<code class="inline-code">Configuration.setTemplateConfigurations(<em class="code-color">...</em>)</code>-s
(which also overrides that you specify here). If
<code class="inline-code">Configuration.setTemplateConfigurations(<em class="code-color">...</em>)</code>
doesn&#39;t specify an encoding for the included template, then the
included file inherits the encoding (the charset) of the
top-level template, unless you specify an encoding with this
option. Examples of valid names: UTF-8, ISO-8859-1, ISO-8859-2,
Shift_JIS, Big5, EUC-KR, GB2312. <span class="marked-for-programmers">Encoding names are the same as the ones
supported be java.io.InputStreamReader (as of Java API 1.3:
MIME-preferred charset names from the IANA Charset
Registry)</span></p>
</li>
<li>
<p><code class="inline-code">ignore_missing</code>: When
<code class="inline-code">true</code>, suppresses the error when the template
to include is missing, instead <code class="inline-code">&lt;#include
...&gt;</code> will print nothing. When
<code class="inline-code">false</code>, the template processing will stop with
error if the template is missing. If you omit this option, then
it defaults to <code class="inline-code">false</code>. A more flexible
approach to handle missing templates (such as if you need to do
something when the template is missing) is using the <a href="ref_specvar.html#ref_specvar_get_optional_template"><code>get_optional_template</code>
special variable</a>.</p>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p>If <code class="inline-code">ignore_missing</code> is
<code class="inline-code">true</code>, yet the <code class="inline-code">include</code>
directive fails with "Template inclusion failed"
error when the template is missing, that&#39;s often because your
application uses a custom
<code class="inline-code">freemarker.cache.TemplateLoader</code>
implementation, which incorrectly (against the API
documentation) throws an <code class="inline-code">IOException</code> in the
<code class="inline-code">findTemplateSource</code> method instead of
returning <code class="inline-code">null</code> if a template is not found.
If it&#39;s so, the Java programmers need to fix that. Another
possibility is of course that it was indeed not possible to
tell if the template exists or not due to some technical
issues, in which case stopping with error is the correct
behavior. See the cause <code class="inline-code">IOException</code> in the
Java stack trace to figure out which case it is.</p>
</div>
</li>
</ul>
<p>Example:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#include &quot;/common/navbar.html&quot; parse=false encoding=&quot;Shift_JIS&quot;&gt;</pre> </div>
<p><span class="marked-for-programmers">Note, that it is possible to
automatically do the commonly used inclusions for all templates,
with the &quot;auto includes&quot; setting of
<code class="inline-code">Configuration</code>.</span></p>
<h3 class="content-header header-section3" id="ref_directive_include_acquisition">Using acquisition</h3>
<p>There&#39;s a special path component represented by an asterisk
(<code class="inline-code">*</code>). It is interpreted as &quot;this directory or
any of its parents&quot;. Therefore, if the template located in
<code class="inline-code">/foo/bar/template.ftl</code> has the following
line:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#include &quot;*/footer.ftl&quot;&gt;</pre> </div>
<p>then the engine will look for the template in following
locations, in this order:</p>
<ul>
<li>
<code class="inline-code">/foo/bar/footer.ftl</code>
</li>
<li>
<code class="inline-code">/foo/footer.ftl</code>
</li>
<li>
<code class="inline-code">/footer.ftl</code>
</li>
</ul>
<p>This mechanism is called <strong>acquisition</strong> and allows the designers to
place commonly included files in a parent directory, and redefine
them on a per-subdirectory basis as needed. We say that the
including template acquires the template to include from the first
parent directory that has it. Note that you can specify not only a
template name to the right of the asterisk, but a subpath as well.
I.e. if the previous template instead read:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#include &quot;*/commons/footer.ftl&quot;&gt;</pre> </div>
<p>then the engine would look for the template in following
locations, in this order:</p>
<ul>
<li>
<code class="inline-code">/foo/bar/commons/footer.ftl</code>
</li>
<li>
<code class="inline-code">/foo/commons/footer.ftl</code>
</li>
<li>
<code class="inline-code">/commons/footer.ftl</code>
</li>
</ul>
<p>Finally, the asterisk needn&#39;t be the first element of the
path:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#include &quot;commons/*/footer.ftl&quot;&gt;</pre> </div>
<p>would cause the engine to look for the template in following
locations, in this order:</p>
<ul>
<li>
<code class="inline-code">/foo/bar/commons/footer.ftl</code>
</li>
<li>
<code class="inline-code">/foo/bar/footer.ftl</code>
</li>
<li>
<code class="inline-code">/foo/footer.ftl</code>
</li>
<li>
<code class="inline-code">/footer.ftl</code>
</li>
</ul>
<p>However, there can be at most one asterisk in the path. If
you specifying more asterisks, the template won&#39;t be found.</p>
<h3 class="content-header header-section3" id="ref_directive_include_localized">Localized lookup</h3>
<p>A locale is a language and an optional country or dialect
identifier (plus also maybe a further variant identifier, like
"MAC"). Whenever a template is requested, a desired
locale is always specified (explicitly or implicitly), and
FreeMarke will try to find a variant of the template that matches
that locale. When a template includes or imports another template,
internally that will also be requested for a locale, for the
locale that the <code class="inline-code">locale</code> setting is set to, and
that&#39;s usually for the locale of the top-level template.</p>
<p>Suppose your template was loaded with locale
<code class="inline-code">en_US</code>, which means U.S. English. When you
include another template:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#include &quot;footer.ftl&quot;&gt;</pre> </div>
<p>the engine will in fact look for several templates, in this
order:</p>
<ul>
<li>
<code class="inline-code">footer_en_US.ftl</code>,
</li>
<li>
<code class="inline-code">footer_en.ftl</code>
</li>
<li>
<code class="inline-code">footer.ftl</code>
</li>
</ul>
<p>and it will use the first one that exists.</p>
<p>Note that if how (and if) FreeMarker searches the localized
variations is configurable by the programmers, so we are just
describing the default behavior here.<span class="marked-for-programmers"> You can disable localized lookup with the
<code class="inline-code">localized_lookup</code> setting
(<code class="inline-code">Configuration.setLocalizedLookup(boolean)</code>).
Also, you can define your own sequence of deduced template names
with the <code class="inline-code">template_lookup_strategy</code> setting
(<code class="inline-code">Configuration.setTemplateLookupStrategy(TemplateLookupStrategy)</code>).</span></p>
<p>When you use both acquisition (i.e., <code class="inline-code">*</code>
step in the path) and localized template lookup, the template with
more specific locale in a parent directory takes precedence over
template with less specific locale in a child directory. Suppose
you use the following include from
<code class="inline-code">/foo/bar/template.ftl</code>:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#include &quot;*/footer.ftl&quot;&gt;</pre> </div>
<p>the engine will look for these templates, in this
order:</p>
<ul>
<li>
<code class="inline-code">/foo/bar/footer_en_US.ftl</code>
</li>
<li>
<code class="inline-code">/foo/footer_en_US.ftl</code>
</li>
<li>
<code class="inline-code">/footer_en_US.ftl</code>
</li>
<li>
<code class="inline-code">/foo/bar/footer_en.ftl</code>
</li>
<li>
<code class="inline-code">/foo/footer_en.ftl</code>
</li>
<li>
<code class="inline-code">/footer_en.ftl</code>
</li>
<li>
<code class="inline-code">/foo/bar/footer.ftl</code>
</li>
<li>
<code class="inline-code">/foo/footer.ftl</code>
</li>
<li>
<code class="inline-code">/footer.ftl</code>
</li>
</ul>
<h3 class="content-header header-section3" id="topic.import_vs_include">Why <code class="inline-code">import</code> should be used instead of
<code class="inline-code">include</code></h3>
<p>Generally, using <a href="ref_directive_import.html#ref.directive.import">the
<code>import</code> directive</a> is a better practice
than using <code class="inline-code">include</code>.</p>
<p>At first glance, import is only fitting if you have a
collection of commonly used macros, functions, and other
variables, which you put into a template for reuse. But, people
often use <code class="inline-code">include</code> to insert a common fragment
of output (e.g. page footer) into multiple templates. The
<code class="inline-code">import</code> directive has no output, so it&#39;s clearly
not a direct replacement. But, it&#39;s usually a better practice to
<a href="dgui_misc_userdefdir.html">put those output fragments
into macros</a>, as macros can have parameters, or even nested
content. If you do that, you have a collection of macros in a
template, that you can <code class="inline-code">import</code>.</p>
<p>So if you have collection of macros, functions and other
variables in a template, this is why <code class="inline-code">import</code> is
generally a better choice:</p>
<ul>
<li>
<p>Imported templates are processed only when first
requested. To compare with <code class="inline-code">include</code>, let&#39;s
say template <code class="inline-code">top.ftl</code> includes
<code class="inline-code">commons.ftl</code>, and
<code class="inline-code">tables.ftl</code>. If
<code class="inline-code">tables.ftl</code> also includes
<code class="inline-code">commons.ftl</code>, then now
<code class="inline-code">commons.ftl</code> will be processed twice. On the
other hand, importing <code class="inline-code">commons.ftl</code> for the
second time just gives back the namespace that was already
initialized during the first import.</p>
</li>
<li>
<p>With imports, each imported template has its own
namespace. As they don&#39;t just drop everything into a common
shared namespace, it&#39;s easier to see in templates where a
referred variable, or macro/function is coming from.
Accidental name clashes are also avoided.</p>
</li>
<li>
<p>If you have several collections of useful
macros/functions/constants (say,
<code class="inline-code">commons.ftl</code>, <code class="inline-code">form.ftl</code>,
<code class="inline-code">report.ftl</code>, etc.), and you decide to
auto-import them, but a top-level template usually only uses
some of them, you can configure auto-imports to be lazy (i.e.,
they on happen when something in their namespace is actually
accessed). This is not possible with auto-includes.</p>
</li>
<li>
<p><code class="inline-code">import</code> never prints to the output,
while <code class="inline-code">include</code> might prints unwanted output,
like some whitespace that wasn&#39;t removed by the automatic
whitespace removal.</p>
</li>
</ul>
<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_import.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_list.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>