http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/pgui_config_sharedvariables.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/pgui_config_sharedvariables.html b/builds/2.3.26-nightly/pgui_config_sharedvariables.html deleted file mode 100644 index d90f624..0000000 --- a/builds/2.3.26-nightly/pgui_config_sharedvariables.html +++ /dev/null @@ -1,143 +0,0 @@ -<!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>Shared variables - 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="Shared variables"> -<meta property="og:locale" content="en_US"> -<meta property="og:url" content="http://freemarker.org/docs/pgui_config_sharedvariables.html"> -<link rel="canonical" href="http://freemarker.org/docs/pgui_config_sharedvariables.html"> -<link rel="icon" href="favicon.png" type="image/png"> -<link rel="stylesheet" type="text/css" href="http://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?1489402528979"> -<script> -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); -ga('create', 'UA-55420501-1', 'auto'); -ga('send', 'pageview'); -</script> -</head> -<body itemscope itemtype="https://schema.org/Code"> - <meta itemprop="url" content="http://freemarker.org/docs/"> - <meta itemprop="name" content="Apache FreeMarker Manual"> - - <!--[if lte IE 9]> - <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div> - <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker"> -</a><ul class="tabs"><li><a href="http://freemarker.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="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.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="searc h-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"><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="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_sharedvariables.html"><span itemprop="name">Shared variables</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><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","Programmer\'s Guide","The Configuration","Shared variables"];</script> - <script src="toc.js?1489402528979"></script> - <script src="docgen-resources/main.min.js?1489402528979"></script> - </div> -<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_settings.html"><span>Next</span></a></div><div class="title-wrapper"> -<h1 class="content-header header-section1" id="pgui_config_sharedvariables" itemprop="headline">Shared variables</h1> -</div></div><p><strong>Shared variables</strong> are variables - that are defined for all templates. You can add shared variables to - the configuration with the <code class="inline-code">setSharedVariable</code> - methods:</p> - -<div class="code-wrapper"><pre class="code-block code-unspecified">Configuration cfg = new Configuration(Configuration.VERSION_2_3_25); -<em>..</em>. -cfg.setSharedVariable("warp", new WarpDirective()); -cfg.setSharedVariable("company", "Foo Inc.");</pre></div><p>In all templates that use this configuration, an user-defined - directive with name <code class="inline-code">wrap</code> and a string with name - <code class="inline-code">company</code> will be visible in the data-model root, so - you don't have to add them to the root hash again and again. A - variable in the root object that you pass to the - <code class="inline-code">Template.process</code> will hide the shared variable with - the same name.</p> <div class="callout warning"> - <strong class="callout-label">Warning!</strong> - - <p>Never use <code class="inline-code">TemplateModel</code> implementation that - is not <a href="gloss.html#gloss.threadSafe">thread-safe</a> for - shared variables, if the configuration is used by multiple threads! - This is the typical situation for Servlet based applications.</p> - </div> -<p>Due to backward compatibility heritage, the set of shared - variables is initially (i.e., for a new - <code class="inline-code">Configuration</code> instance) not empty. It contains the - following user-defined directives (they are "user-defined" in the - sense that you use <code class="inline-code">@</code> to call them instead of - <code class="inline-code">#</code>):</p> <div class="table-responsive"> - <table class="table"> - - <thead> - <tr> - <th>name</th> - - - <th>class</th> - - </tr> - - </thead> - - - <tbody> - <tr> - <td><code class="inline-code">capture_output</code></td> - - - <td><code class="inline-code">freemarker.template.utility.CaptureOutput</code></td> - - </tr> - - - <tr> - <td><code class="inline-code">compress</code></td> - - - <td><code class="inline-code">freemarker.template.utility.StandardCompress</code></td> - - </tr> - - - <tr> - <td><code class="inline-code">html_escape</code></td> - - - <td><code class="inline-code">freemarker.template.utility.HtmlEscape</code></td> - - </tr> - - - <tr> - <td><code class="inline-code">normalize_newlines</code></td> - - - <td><code class="inline-code">freemarker.template.utility.NormalizeNewlines</code></td> - - </tr> - - - <tr> - <td><code class="inline-code">xml_escape</code></td> - - - <td><code class="inline-code">freemarker.template.utility.XmlEscape</code></td> - - </tr> - - </tbody> - - </table> - </div> -<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_settings.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="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">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></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href ="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p> -<p class="copyright"> -© <span itemprop="copyrightYear">1999</span>â2017 -<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p> -</div></div></div></body> -</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/pgui_config_templateconfigurations.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/pgui_config_templateconfigurations.html b/builds/2.3.26-nightly/pgui_config_templateconfigurations.html deleted file mode 100644 index 2c2f86c..0000000 --- a/builds/2.3.26-nightly/pgui_config_templateconfigurations.html +++ /dev/null @@ -1,314 +0,0 @@ -<!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>Template configurations - 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="Template configurations"> -<meta property="og:locale" content="en_US"> -<meta property="og:url" content="http://freemarker.org/docs/pgui_config_templateconfigurations.html"> -<link rel="canonical" href="http://freemarker.org/docs/pgui_config_templateconfigurations.html"> -<link rel="icon" href="favicon.png" type="image/png"> -<link rel="stylesheet" type="text/css" href="http://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?1489402528979"> -<script> -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); -ga('create', 'UA-55420501-1', 'auto'); -ga('send', 'pageview'); -</script> -</head> -<body itemscope itemtype="https://schema.org/Code"> - <meta itemprop="url" content="http://freemarker.org/docs/"> - <meta itemprop="name" content="Apache FreeMarker Manual"> - - <!--[if lte IE 9]> - <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div> - <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker"> -</a><ul class="tabs"><li><a href="http://freemarker.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="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.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="searc h-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"><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="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_templateconfigurations.html"><span itemprop="name">Template configurations</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><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","Programmer\'s Guide","The Configuration","Template configurations"];</script> - <script src="toc.js?1489402528979"></script> - <script src="docgen-resources/main.min.js?1489402528979"></script> - </div> -<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_errorhandling.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_outputformatsautoesc.html"><span>Next</span></a></div><div class="title-wrapper"> -<h1 class="content-header header-section1" id="pgui_config_templateconfigurations" itemprop="headline">Template configurations</h1> -</div></div><p>"Template configurations" refers to the - <code class="inline-code">template_configurations</code> setting of - <code class="inline-code">Configuration</code> - (<code class="inline-code">Configuration.setTemplateConfigurations(<em class="code-color">...</em>)</code>). - This setting lets you override individual settings coming from the - common <code class="inline-code">Configuration</code> object, depending on the name - (path) of the template.</p><p>It's important to understand, however, that this setting only - has effect if you get templates with - <code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>, - not when you create templates directly with the - <code class="inline-code">Template</code> constructors. In that case it's up to you - to invoke this mechanism (see <code class="inline-code">TemplateCache</code> source - code as an example).</p><p>You will use these kind of objects to declare your template - configuration rules:</p><ul> - <li> - <p><code class="inline-code">TemplateConfiguration</code>-s: These store the - actual setting assignments that you want to apply. For example, - this <code class="inline-code">TemplateConfiguration</code> will set the - encoding and the output format of the matched template (and leave - all other settings of it alone):</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">TemplateConfiguration tcUTF8XML = new TemplateConfiguration(); -tc.setEncoding("utf-8"); -tc.setOutputFormat(XMLOutputFormat.INSTANCE);</pre></div> - </li> - - <li> - <p><code class="inline-code">TemplateSourceMatcher</code> (abstract) - subclasses: These define a rule that matches templates based on - their source name (their source path; as in - <code class="inline-code">Template.getSourceName()</code>), and possibly on - other <code class="inline-code">TemplateLoader</code>-dependent properties. For - example, <code class="inline-code">new FileExtensionMatcher("xml")</code> - matches templates that has <code class="inline-code">xml</code> file extension. - See all the subclasses in the Java API documentation.</p> - </li> - - <li> - <p><code class="inline-code">TemplateConfigurationFactory</code>-es: This is - what connects <code class="inline-code">TemplateConfiguration</code>-s and - <code class="inline-code">TemplateSourceMatcher</code>-s together. This is the - Java type of the <code class="inline-code">template_configurations</code> - setting. See the examples below for more.</p> - </li> - </ul> - - - - -<h2 class="content-header header-simplesect" id="autoid_47">Example 1</h2> - - - <p>This setup combines our earlier two example objects with a - <code class="inline-code">ConditionalTemplateConfigurationFactory</code>, causing - all templates with <code class="inline-code">xml</code> extension to get UTF-8 - encoding and XML output format:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setTemplateConfigurations( - new ConditionalTemplateConfigurationFactory( - new FileExtensionMatcher("xml"), - tcUTF8XML));</pre></div> - - <p>The same configuring is also doable if you don't have access - to the configuring Java code, but only to a Java - <code class="inline-code">*.properties</code> file or other kind of string-string - key value pairs (the <code class="inline-code">\</code>-s are prescribed by the - Java Properties file format for multi-line values):</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \ - ConditionalTemplateConfigurationFactory( \ - FileExtensionMatcher("xml"), \ - TemplateConfiguration( \ - encoding = "utf-8", \ - outputFormat = XMLOutputFormat() \ - ) \ - )</pre></div> - - - - - -<h2 class="content-header header-simplesect" id="autoid_48">Example 2</h2> - - - <p>Let's say you only need to handle templates in the - <code class="inline-code">mail</code> directory specially, other templates can use - the setting coming from the shared <code class="inline-code">Configuration</code> - singleton. The names of templates there must contain - <code class="inline-code">".subject."</code> or <code class="inline-code">".body."</code>. - Subject templates must get <code class="inline-code">plainText</code> output - format, while body templates must get <code class="inline-code">HTML</code> output - format. So we have to make a choice here, and that's when you need a - <code class="inline-code">FirstMatchTemplateConfigurationFactory</code>.</p> - - <p>Assuming <code class="inline-code">cfg</code> stores the shared - <code class="inline-code">Configuration</code> singleton, you set this up like - this:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setTemplateConfigurations( - new ConditionalTemplateConfigurationFactory( - new PathGlobMatcher("mail/**"), - new FirstMatchTemplateConfigurationFactory( - new ConditionalTemplateConfigurationFactory( - new FileNameGlobMatcher("*.subject.*"), - tcSubject), - new ConditionalTemplateConfigurationFactory( - new FileNameGlobMatcher("*.body.*"), - tcBody) - ) - .noMatchErrorDetails( - "Mail template names must contain \".subject.\" or \".body.\"!") - ));</pre></div> - - <p>The equivalent configuration using a Java - <code class="inline-code">*.properties</code> file or other kind of string-string - key value pairs (the <code class="inline-code">\</code>-s are prescribed by the - Java Properties file format only):</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \ - ConditionalTemplateConfigurationFactory( \ - PathGlobMatcher("mail/**"), \ - FirstMatchTemplateConfigurationFactory( \ - ConditionalTemplateConfigurationFactory( \ - FileNameGlobMatcher("*.subject.*"), \ - TemplateConfiguration(outputFormat = PlainTextOutputFormat()) \ - ), \ - ConditionalTemplateConfigurationFactory( \ - FileNameGlobMatcher("*.body.*"), \ - TemplateConfiguration(outputFormat = HTMLOutputFormat()) \ - ), \ - noMatchErrorDetails = 'Mail template names must contain ".subject." or ".body."!' \ - ) \ - )</pre></div> - - - - - -<h2 class="content-header header-simplesect" id="autoid_49">Example 3</h2> - - - <p>Let's say you want the following deviations from the shared - <code class="inline-code">Configuration</code> settings in your - application:</p> - - <ul> - <li> - <p>All templates whose name contains - <code class="inline-code">".stats."</code> should use ISO date/time format and - UTC time zone</p> - </li> - - <li> - <p>All templates inside the <code class="inline-code">mail</code> directory - should use UTF-8 encoding</p> - </li> - - <li> - <p>Templates with <code class="inline-code">xml</code> file extension - should use XML <code class="inline-code">output_format</code>, templates with - <code class="inline-code">html</code> or <code class="inline-code">htm</code> extension - should use HTML output format. For other templates, the shared - <code class="inline-code">Configuration</code> can dictate the - <code class="inline-code">output_format</code>.</p> - </li> - </ul> - - <p>Here we have 3 independent concerns, and possibly multiple (or - none) of those apply to a template; that's when you need a - <code class="inline-code">MergingTemplateConfigurationFactory</code>. The last - point describes a rule where you have mutually exclusive choices; - that's when you need a - <code class="inline-code">FirstMatchTemplateConfigurationFactory</code>, but this - time no choice is also allowed. Here's the source code, assuming - <code class="inline-code">cfg</code> stores the shared - <code class="inline-code">Configuration</code> instance:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">TemplateConfiguration tcStats = new TemplateConfiguration(); -tcStats.setDateTimeFormat("iso"); -tcStats.setDateFormat("iso"); -tcStats.setTimeFormat("iso"); -tcStats.setTimeZone(DateUtil.UTC); - -TemplateConfiguration tcMail = new TemplateConfiguration(); -tcMail.setEncoding("utf-8"); - -TemplateConfiguration tcHTML = new TemplateConfiguration(); -tcHTML.setOutputFormat(HTMLOutputFormat.INSTANCE); - -TemplateConfiguration tcXML = new TemplateConfiguration(); -tcXML.setOutputFormat(XMLOutputFormat.INSTANCE); - -cfg.setTemplateConfigurations( - new MergingTemplateConfigurationFactory( - new ConditionalTemplateConfigurationFactory( - new FileNameGlobMatcher("*.stats.*"), - tcStats), - new ConditionalTemplateConfigurationFactory( - new PathGlobMatcher("mail/**"), - tcMail), - new FirstMatchTemplateConfigurationFactory( - new ConditionalTemplateConfigurationFactory( - new FileExtensionMatcher("xml"), - tcXML), - new ConditionalTemplateConfigurationFactory( - new OrMatcher( - new FileExtensionMatcher("html"), - new FileExtensionMatcher("htm")), - tcHTML) - ).allowNoMatch(true) - ) -);</pre></div> - - <p>The equivalent configuration using a Java - <code class="inline-code">*.properties</code> file or other kind of string-string - key value pairs (the <code class="inline-code">\</code>-s are prescribed by the - Java Properties file format only):</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \ - MergingTemplateConfigurationFactory( \ - ConditionalTemplateConfigurationFactory( \ - FileNameGlobMatcher("*.stats.*"), \ - TemplateConfiguration( \ - dateTimeFormat = "iso", \ - dateFormat = "iso", \ - timeFormat = "iso", \ - timeZone = TimeZone("UTC") \ - ) \ - ), \ - ConditionalTemplateConfigurationFactory( \ - PathGlobMatcher("mail/**"), \ - TemplateConfiguration(encoding = "utf-8") \ - ), \ - FirstMatchTemplateConfigurationFactory( \ - ConditionalTemplateConfigurationFactory( \ - FileExtensionMatcher("xml"), \ - TemplateConfiguration(outputFormat = XMLOutputFormat()) \ - ), \ - ConditionalTemplateConfigurationFactory( \ - OrMatcher( \ - FileExtensionMatcher("html"), \ - FileExtensionMatcher("htm") \ - ), \ - TemplateConfiguration(outputFormat = HTMLOutputFormat()) \ - ), \ - allowNoMatch = true \ - ) \ - )</pre></div> - <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_errorhandling.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_outputformatsautoesc.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="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">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></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href ="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p> -<p class="copyright"> -© <span itemprop="copyrightYear">1999</span>â2017 -<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p> -</div></div></div></body> -</html> http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/pgui_config_templateloading.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/pgui_config_templateloading.html b/builds/2.3.26-nightly/pgui_config_templateloading.html deleted file mode 100644 index 62595bb..0000000 --- a/builds/2.3.26-nightly/pgui_config_templateloading.html +++ /dev/null @@ -1,364 +0,0 @@ -<!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>Template loading - 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="Template loading"> -<meta property="og:locale" content="en_US"> -<meta property="og:url" content="http://freemarker.org/docs/pgui_config_templateloading.html"> -<link rel="canonical" href="http://freemarker.org/docs/pgui_config_templateloading.html"> -<link rel="icon" href="favicon.png" type="image/png"> -<link rel="stylesheet" type="text/css" href="http://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?1489402528979"> -<script> -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); -ga('create', 'UA-55420501-1', 'auto'); -ga('send', 'pageview'); -</script> -</head> -<body itemscope itemtype="https://schema.org/Code"> - <meta itemprop="url" content="http://freemarker.org/docs/"> - <meta itemprop="name" content="Apache FreeMarker Manual"> - - <!--[if lte IE 9]> - <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div> - <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker"> -</a><ul class="tabs"><li><a href="http://freemarker.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="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.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="searc h-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"><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="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_templateloading.html"><span itemprop="name">Template loading</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><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","Programmer\'s Guide","The Configuration","Template loading"];</script> - <script src="toc.js?1489402528979"></script> - <script src="docgen-resources/main.min.js?1489402528979"></script> - </div> -<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_settings.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_errorhandling.html"><span>Next</span></a></div><div class="title-wrapper"> -<h1 class="content-header header-section1" id="pgui_config_templateloading" itemprop="headline">Template loading</h1> -</div></div><div class="page-menu"> -<div class="page-menu-title">Page Contents</div> -<ul><li><a class="page-menu-link" href="#autoid_38" data-menu-target="autoid_38">Template loaders</a><ul><li><a class="page-menu-link" href="#autoid_39" data-menu-target="autoid_39">Built-in template loaders</a></li><li><a class="page-menu-link" href="#autoid_40" data-menu-target="autoid_40">Loading templates from multiple locations</a></li><li><a class="page-menu-link" href="#autoid_41" data-menu-target="autoid_41">Loading templates from other sources</a></li><li><a class="page-menu-link" href="#autoid_42" data-menu-target="autoid_42">The template name (template path)</a></li></ul></li><li><a class="page-menu-link" href="#pgui_config_templateloading_caching" data-menu-target="pgui_config_templateloading_caching">Template caching</a></li></ul> </div> - - - - -<h2 class="content-header header-section2" id="autoid_38">Template loaders</h2> - - - - - <p>Template loaders are objects that load raw textual data based - on abstract template paths like <code class="inline-code">"index.ftl"</code> or - <code class="inline-code">"products/catalog.ftl"</code>. It's up to the concrete - template loader if from where and how the template - "files" are loaded. They could be real files inside a - specified directory, or values in a data base table, or - <code class="inline-code">String</code>-s in a Java Map, etc. When you call - <code class="inline-code">cfg.getTemplate</code> (where <code class="inline-code">cfg</code> is - a <code class="inline-code">Configuration</code> instance), FreeMarker asks the - template loader (<code class="inline-code">cfg.getTemplateLoader</code>) to return - the text for the given template path, and then FreeMarker parses - that text as template. It doesn't care or even know if the template - is a real file or not, and where it is physically; those details are - only known by the template loader.</p> - - - - - - -<h3 class="content-header header-section3" id="autoid_39">Built-in template loaders</h3> - - - <p>You can set up the three most common template loading - mechanism in the <code class="inline-code">Configuration</code> using the - following <em>convenience</em> methods:</p> - - <ul> - <li> - <p><code class="inline-code">void setDirectoryForTemplateLoading(File - dir)</code>: Sets a directory on the file system from which - to load templates. Template names (template paths) will be - interpreted relatively to this physical directory. It won't - let you load files outside this directory.</p> - </li> - - <li> - <p><code class="inline-code">void setClassForTemplateLoading(Class cl, - String basePackagePath)</code> and <code class="inline-code">void - setClassLoaderForTemplateLoading(ClassLoader classLoader, - String basePackagePath)</code>: These are for when you want - to load templates via the same mechanism with which Java loads - classes (from the class-path, as they used to say vaguely). - This is very likely be the preferred means of loading - templates for production code, as it allows you to keep - everything inside the deployment <code class="inline-code">jar</code> files. - The first parameter decides which Java - <code class="inline-code">ClassLoader</code> will be used. The second - parameter specifies the package that contains the templates, - in <code class="inline-code">/</code>-separated format. Note that if you - don't start it with <code class="inline-code">/</code>, it will be - interpreted relatively to the package of the - <code class="inline-code">Class</code> parameter.</p> - </li> - - <li> - <p><code class="inline-code">void setServletContextForTemplateLoading(Object - servletContext, String path)</code>: Takes the context of - your Servlet-based web application, and a base path, which is - interpreted relative to the web application root directory - (that's the parent of the <code class="inline-code">WEB-INF</code> - directory). Note that we refer to "directory" here although - this loading method works even for unpacked - <code class="inline-code">.war</code> files, since it uses - <code class="inline-code">ServletContext.getResource()</code> to access the - templates. If you omit the second parameter (or use - <code class="inline-code">""</code>), you can simply store the static files - (<code class="inline-code">.html</code>, <code class="inline-code">.jpg</code>, etc.) - mixed with the <code class="inline-code">.ftl</code> files. Of course, you - must set up a Servlet for the <code class="inline-code">*.ftl</code>, - <code class="inline-code">*.ftlh</code>, <code class="inline-code">*.ftlx</code> - uri-patterns in <code class="inline-code">WEB-INF/web.xml</code> for this, - otherwise the client will get the raw templates as is! To - avoid a such accident, many prefers storing the templates - somewhere inside the <code class="inline-code">WEB-INF</code> directory, - which is never visitable directly. This mechanism will very - likely be the preferred means of loading templates for servlet - applications, since the templates can be updated without - restarting the web application, while this often doesn't work - with the class-loader mechanism.</p> - </li> - </ul> - - <p>If you want to use a custom - <code class="inline-code">TemplateLoader</code> implementation, or need to set - up some extra settings of a built-in template loader, you need to - instantiate the <code class="inline-code">TemplateLoader</code> object yourself, - and then call - <code class="inline-code">Configuration.setTemplateLoader(TemplateLoader)</code>:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">WebappTemplateLoader templateLoader = new WebappTemplateLoader(servletContext, "WEB-INF/templates"); -templateLoader.setURLConnectionUsesCaches(false); -templateLoader.setAttemptFileAccess(false); -cfg.setTemplateLoader(templateLoader);</pre></div> - - - - - - - -<h3 class="content-header header-section3" id="autoid_40">Loading templates from multiple locations</h3> - - - <p>If you need to load templates from multiple locations, you - have to instantiate the template loader objects for every - location, wrap them into a <code class="inline-code">MultiTemplateLoader</code>, - and finally pass that loader to the - <code class="inline-code">setTemplateLoader(TemplateLoader loader)</code> method - of <code class="inline-code">Configuration</code>. Here's an example for loading - templates from two distinct directories and with the - class-loader:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">import freemarker.cache.*; // template loaders live in this package - -<em>...</em> - -FileTemplateLoader ftl1 = new FileTemplateLoader(new File("/tmp/templates")); -FileTemplateLoader ftl2 = new FileTemplateLoader(new File("/usr/data/templates")); -ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), "/com/example/templates"); - -MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] { ftl1, ftl2, ctl }); - -cfg.setTemplateLoader(mtl);</pre></div> - - <p>Now FreeMarker will try to load templates from - <code class="inline-code">/tmp/templates</code> directory, and if it does not - find the requested template there, it will try to load that from - <code class="inline-code">/usr/data/templates</code>, and if it still does not - find the requested template, then it tries to load it from the - <code class="inline-code">com.example.templates</code> Java package.</p> - - - - - - - -<h3 class="content-header header-section3" id="autoid_41">Loading templates from other sources</h3> - - - <p>If none of the built-in class loaders fit your needs, you - can write your own class that implements the - <code class="inline-code">freemarker.cache.TemplateLoader</code> interface and - pass it to the <code class="inline-code">setTemplateLoader(TemplateLoader - loader)</code> method of <code class="inline-code">Configuration</code>. - Please read the API JavaDoc for more information.</p> - - <p>If your template source accesses the templates through an - URL, you needn't implement a <code class="inline-code">TemplateLoader</code> - from scratch; you can choose to subclass - <code class="inline-code">freemarker.cache.URLTemplateLoader</code> instead and - just implement the <code class="inline-code">URL getURL(String - templateName)</code> method.</p> - - - - - - - -<h3 class="content-header header-section3" id="autoid_42">The template name (template path)</h3> - - - - - - - - - <p>It is up to the template loader how it interprets template - names (also known as template paths). But to work together with - other components there are restrictions regarding the format of - the path. In general, it is strongly recommended that template - loaders use URL-style paths. The path must not use - <code class="inline-code">/</code> (path step separator) character, nor the - <code class="inline-code">.</code> (same-directory) and <code class="inline-code">..</code> - (parent directory) path steps with other meaning than they have in - URL paths (or in UN*X paths). The <code class="inline-code">*</code> (asterisk) - step is also reserved, and used for "template - acquisition" feature of FreeMarker.</p> - - <p><code class="inline-code">://</code> (or with - <code class="inline-code">template_name_format</code> setting set to - <code class="inline-code">DEFAULT_2_4_0</code>, the <code class="inline-code">:</code> (colon) - character) is reserved for specifying a scheme part, similarly as - it works with URI-s. For example - <code class="inline-code">someModule://foo/bar.ftl</code> uses the - <code class="inline-code">someModule</code>, or assuming the - <code class="inline-code">DEFAULT_2_4_0</code> format, - <code class="inline-code">classpath:foo/bar.ftl</code> uses the - <code class="inline-code">classpath</code> scheme. Interpreting the scheme part - is completely up to the <code class="inline-code">TemplateLoader</code>. (The - FreeMarker core is only aware of the idea of schemes because - otherwise it couldn't resolve relative template names - properly.)</p> - - <p>FreeMarker always normalizes the paths before passing them - to the <code class="inline-code">TemplateLoader</code>, so the paths don't - contain <code class="inline-code">/../</code> or such, and are relative to the - imaginary template root directory (that is, they don't start with - <code class="inline-code">/</code>). They don't contain the <code class="inline-code">*</code> - step either, as template acquisition happens in an earlier stage. - Furthermore, with <code class="inline-code">template_name_format</code> setting - set to <code class="inline-code">DEFAULT_2_4_0</code>, multiple consecutive - <code class="inline-code">/</code>-s will be normalized to a single - <code class="inline-code">/</code> (unless they are part of the - <code class="inline-code">://</code> scheme separator).</p> - - <p>Note that FreeMarker template path should always uses slash - (not backslash) regardless of the host OS.</p> - - - - - - -<h2 class="content-header header-section2" id="pgui_config_templateloading_caching">Template caching</h2> - - - - - - - <p>FreeMarker caches templates (assuming you use the - <code class="inline-code">Configuration</code> methods to create - <code class="inline-code">Template</code> objects). This means that when you call - <code class="inline-code">getTemplate</code>, FreeMarker not only returns the - resulting <code class="inline-code">Template</code> object, but stores it in a - cache, so when next time you call <code class="inline-code">getTemplate</code> - with the same (or equivalent) path, it just returns the cached - <code class="inline-code">Template</code> instance, and will not load and parse - the template file again.</p> - - <p>If you change the template file, then FreeMarker will re-load - and re-parse the template automatically when you get the template - next time. However, since always checking for changes can be burden - for a system that processes lot of templates, there is a - <code class="inline-code">Configuration</code> level setting called "update - delay" (defaults is 5 seconds). Until this much time has - elapsed since the last checking for a newer version, FreeMarker will - not check again if the template was changed. If you want to see the - changes without delay, set this setting to 0. Note that some - template loaders won't see that a template was changed because of - the underlying storage mechanism doesn't support that; for example, - class-loader based template loaders may have this problem.</p> - - <p>A template will be removed from the cache if you call - <code class="inline-code">getTemplate</code> and FreeMarker realizes that the - template file has been removed meanwhile. Also, if the JVM thinks - that it begins to run out of memory, by default it can arbitrarily - drop templates from the cache. Furthermore, you can empty the cache - manually with the <code class="inline-code">clearTemplateCache</code> method of - <code class="inline-code">Configuration</code>. You can also drop selected - template from the cache with - <code class="inline-code">removeTemplateFromCache</code>; this can be also - utilized to force re-loading a template regardless of the - "update delay" setting.</p> - - <p>The actual strategy of when a cached template should be thrown - away is pluggable with the <code class="inline-code">cache_storage</code> setting, - by which you can plug any <code class="inline-code">CacheStorage</code> - implementation. For most users - <code class="inline-code">freemarker.cache.MruCacheStorage</code> will be - sufficient. This cache storage implements a two-level Most Recently - Used cache. In the first level, items are strongly referenced up to - the specified maximum (strongly referenced items can't be dropped by - the JVM, as opposed to softly referenced items). When the maximum is - exceeded, the least recently used item is moved into the second - level cache, where they are softly referenced, up to another - specified maximum. The size of the strong and soft parts can be - specified with the constructor. For example, set the size of the - strong part to 20, and the size of soft part to 250:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250))</pre></div> - - <p>Or, since <code class="inline-code">MruCacheStorage</code> is the default - cache storage implementation:</p> - - - -<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setSetting(Configuration.CACHE_STORAGE_KEY, "strong:20, soft:250");</pre></div> - - <p>When you create a new <code class="inline-code">Configuration</code> object, - initially it uses an <code class="inline-code">MruCacheStorage</code> where - <code class="inline-code">strongSizeLimit</code> is 0, and - <code class="inline-code">softSizeLimit</code> is - <code class="inline-code">Integer.MAX_VALUE</code> (that is, in practice, - infinite). Depending on how smart the JVM is, using non-0 - <code class="inline-code">strongSizeLimit</code> is maybe a safer option, as with - only softly referenced items the JVM could even throw the most - frequently used templates when there's a resource shortage, which - then have to be re-loaded and re-parsed, burdening the system even - more.</p> - <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_settings.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_errorhandling.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="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">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></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href ="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p> -<p class="copyright"> -© <span itemprop="copyrightYear">1999</span>â2017 -<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p> -</div></div></div></body> -</html> http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/pgui_datamodel.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/pgui_datamodel.html b/builds/2.3.26-nightly/pgui_datamodel.html deleted file mode 100644 index d660cee..0000000 --- a/builds/2.3.26-nightly/pgui_datamodel.html +++ /dev/null @@ -1,55 +0,0 @@ -<!doctype html> -<!-- Generated by FreeMarker/Docgen from DocBook --> -<html lang="en" class="page-type-chapter"> -<head prefix="og: http://ogp.me/ns#"> -<meta charset="utf-8"> -<title>The Data Model - 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="The Data Model"> -<meta property="og:locale" content="en_US"> -<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel.html"> -<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel.html"> -<link rel="icon" href="favicon.png" type="image/png"> -<link rel="stylesheet" type="text/css" href="http://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?1489402528979"> -<script> -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); -ga('create', 'UA-55420501-1', 'auto'); -ga('send', 'pageview'); -</script> -</head> -<body itemscope itemtype="https://schema.org/Code"> - <meta itemprop="url" content="http://freemarker.org/docs/"> - <meta itemprop="name" content="Apache FreeMarker Manual"> - - <!--[if lte IE 9]> - <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div> - <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker"> -</a><ul class="tabs"><li><a href="http://freemarker.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="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.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="searc h-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"><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="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li></ul><div class="bookmark s" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><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","Programmer\'s Guide","The Data Model"];</script> - <script src="toc.js?1489402528979"></script> - <script src="docgen-resources/main.min.js?1489402528979"></script> - </div> -<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart_all.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_basics.html"><span>Next</span></a></div><div class="title-wrapper"> -<h1 class="content-header header-chapter" id="pgui_datamodel" itemprop="headline">The Data Model</h1> -</div></div><div class="page-menu"> -<div class="page-menu-title">Section Contents</div> -<ul><li><a class="page-menu-link" href="pgui_datamodel_basics.html" data-menu-target="pgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_datamodel_scalar.html" data-menu-target="pgui_datamodel_scalar">Scalars</a></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html" data-menu-target="pgui_datamodel_parent">Containers</a></li><li><a class="page-menu-link" href="pgui_datamodel_method.html" data-menu-target="pgui_datamodel_method">Methods</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html" data-menu-target="pgui_datamodel_directive">Directives</a></li><li><a class="page-menu-link" href="pgui_datamodel_node.html" data-menu-target="pgui_datamodel_node">Node variables</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html" data-menu-target="pgui_datamodel_objectWrapper">Object wrappers</a></li></ul> </div><p>This is just an introductory explanation. See the <a href="api/index.html">FreeMarker Java API documentation</a> for more - detailed information.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart_all.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_basics.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="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">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></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href ="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p> -<p class="copyright"> -© <span itemprop="copyrightYear">1999</span>â2017 -<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p> -</div></div></div></body> -</html> http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/pgui_datamodel_basics.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/pgui_datamodel_basics.html b/builds/2.3.26-nightly/pgui_datamodel_basics.html deleted file mode 100644 index eae2c70..0000000 --- a/builds/2.3.26-nightly/pgui_datamodel_basics.html +++ /dev/null @@ -1,105 +0,0 @@ -<!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>Basics - 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="Basics"> -<meta property="og:locale" content="en_US"> -<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_basics.html"> -<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_basics.html"> -<link rel="icon" href="favicon.png" type="image/png"> -<link rel="stylesheet" type="text/css" href="http://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?1489402528979"> -<script> -(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); -ga('create', 'UA-55420501-1', 'auto'); -ga('send', 'pageview'); -</script> -</head> -<body itemscope itemtype="https://schema.org/Code"> - <meta itemprop="url" content="http://freemarker.org/docs/"> - <meta itemprop="name" content="Apache FreeMarker Manual"> - - <!--[if lte IE 9]> - <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div> - <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker"> -</a><ul class="tabs"><li><a href="http://freemarker.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="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.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="searc h-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"><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="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_basics.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><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","Programmer\'s Guide","The Data Model","Basics"];</script> - <script src="toc.js?1489402528979"></script> - <script src="docgen-resources/main.min.js?1489402528979"></script> - </div> -<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_scalar.html"><span>Next</span></a></div><div class="title-wrapper"> -<h1 class="content-header header-section1" id="pgui_datamodel_basics" itemprop="headline">Basics</h1> -</div></div><p>You have seen how to build a data-model in the <a href="pgui_quickstart.html">Getting Started</a> using the standard - Java classes (<code class="inline-code">Map</code>, <code class="inline-code">String</code>, - etc.). Internally, the variables available in the template are Java - objects that implement the - <code class="inline-code">freemarker.template.TemplateModel</code> interface. But - you could use standard Java collections as variables in your - data-model, because these were replaced with the appropriate - <code class="inline-code">TemplateModel</code> instances behind the scenes. This - facility is called <strong>object wrapping</strong>. - The object wrapping facility can convert <em>any</em> kind - of object transparently to the instances of classes that implement - <code class="inline-code">TemplateModel</code> interface. This makes it possible, - for example, to access <code class="inline-code">java.sql.ResultSet</code> as - sequence variable in templates, or to access - <code class="inline-code">javax.servlet.ServletRequest</code> objects as a hash - variable that contains the request attributes, or even to traverse XML - documents as FTL variables (<a href="xgui.html">see here</a>). To - wrap (convert) these objects, however, you need to plug the proper - <code class="inline-code">ObjectWrapper</code> implementation (possibly your custom - implementation); this will be discussed <a href="pgui_datamodel_objectWrapper.html">later</a>. The point for now - is that any object that you want to access from the templates, sooner - or later must be converted to an object that implements - <code class="inline-code">TemplateModel</code> interface. So first you should - familiarize yourself with writing of <code class="inline-code">TemplateModel</code> - implementations.</p><p>There is roughly one - <code class="inline-code">freemarker.template.TemplateModel</code> descendant - interface corresponding to each basic type of variable - (<code class="inline-code">TemplateHashModel</code> for hashes, - <code class="inline-code">TemplateSequenceModel</code> sequences, - <code class="inline-code">TemplateNumberModel</code> for numbers, etc.). For - example, if you want to expose a <code class="inline-code">java.sql.ResultSet</code> - as a sequence for the templates, then you have to write a - <code class="inline-code">TemplateSequenceModel</code> implementation that can read - <code class="inline-code">java.sql.ResultSet</code>-s. We used to say on this, that - you <em>wrap</em> the - <code class="inline-code">java.sql.ResultSet</code> with your - <code class="inline-code">TemplateModel</code> implementation, as basically you just - encapsulate the <code class="inline-code">java.sql.ResultSet</code> to provide - access to it with the common <code class="inline-code">TemplateSequenceModel</code> - interface. Note that a class can implement multiple - <code class="inline-code">TemplateModel</code> interfaces; this is why FTL variables - can have multiple types (see: <a href="dgui_datamodel_basics.html">Template Author's Guide/Values, Types/Basics</a>)</p><p>Note that a trivial implementation of these interfaces is - provided with the <code class="inline-code">freemarker.template</code> package. For - example, to convert a <code class="inline-code">String</code> to FTL string - variable, you can use <code class="inline-code">SimpleScalar</code>, to convert a - <code class="inline-code">java.util.Map</code> to FTL hash variable, you can use - <code class="inline-code">SimpleHash</code>, etc.</p><p>An easy way to try your own <code class="inline-code">TemplateModel</code> - implementation, is to create an instance of that, and drop it directly - into the data-model (as <code class="inline-code">put</code> it into the root hash). - The object wrapper will expose it untouched for the template, as it - already implements <code class="inline-code">TemplateModel</code>, so no conversion - (wrapping) needed. (This trick is also useful in cases when you do not - want the object wrapper to try to wrap (convert) a certain - object.)</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_scalar.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="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">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></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href ="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p> -<p class="copyright"> -© <span itemprop="copyrightYear">1999</span>â2017 -<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p> -</div></div></div></body> -</html>
