http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_if.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/ref_directive_if.html b/builds/2.3.26-nightly/ref_directive_if.html new file mode 100644 index 0000000..99de82d --- /dev/null +++ b/builds/2.3.26-nightly/ref_directive_if.html @@ -0,0 +1,196 @@ +<!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>if, else, elseif - 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="if, else, elseif"> +<meta property="og:locale" content="en_US"> +<meta property="og:url" content="http://freemarker.org/docs/ref_directive_if.html"> +<link rel="canonical" href="http://freemarker.org/docs/ref_directive_if.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="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_if.html"><span itemprop="name">if, else, elseif</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","Template Language Reference","Directive Reference","if, else, elseif"];</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="ref_directive_global.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_import.html"><span>Next</span></a></div><div class="title-wrapper"> +<h1 class="content-header header-section1" id="ref_directive_if" itemprop="headline">if, else, elseif</h1> +</div></div><div class="page-menu"> +<div class="page-menu-title">Page Contents</div> +<ul><li><a class="page-menu-link" href="#autoid_94" data-menu-target="autoid_94">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_95" data-menu-target="autoid_95">Description</a></li></ul> </div><a name="ref.directive.if"></a><a name="ref.directive.else"></a><a name="ref.directive.elseif"></a> + + + + +<h2 class="content-header header-section2" id="autoid_94">Synopsis</h2> + + + +<pre class="metaTemplate"> +<code class="inline-code"><#if <em class="code-color">condition</em>> + <em class="code-color">...</em> +<#elseif <em class="code-color">condition2</em>> + <em class="code-color">...</em> +<#elseif <em class="code-color">condition3</em>> + <em class="code-color">...</em> +<em class="code-color">...</em> +<#else> + <em class="code-color">...</em> +</#if></code> +</pre> + + + <p>Where:</p> + + <ul> + <li> + <code class="inline-code"><em class="code-color">condition</em></code>, + <code class="inline-code"><em class="code-color">condition2</em></code>, + ...etc.: Expression evaluates to a boolean value. + </li> + </ul> + + <p>The <code class="inline-code">elseif</code>-s and the + <code class="inline-code">else</code> are optional.</p> + + <p>Camel case name variant: <code class="inline-code">elseIf</code></p> + + + + + +<h2 class="content-header header-section2" id="autoid_95">Description</h2> + + + <p>You can use <code class="inline-code">if</code>, <code class="inline-code">elseif</code> + and <code class="inline-code">else</code> directives to conditionally skip a + section of the template. The + <code class="inline-code"><em class="code-color">condition</em></code>-s must + evaluate to a boolean value, or else an error will abort template + processing. The <code class="inline-code">elseif</code>-s and + <code class="inline-code">else</code>-s must occur inside <code class="inline-code">if</code> + (that is, between the <code class="inline-code">if</code> start-tag and end-tag). + The <code class="inline-code">if</code> can contain any number of + <code class="inline-code">elseif</code>-s (including 0) and at the end optionally + one <code class="inline-code">else</code>. Examples:</p> + + <p><code class="inline-code">if</code> with 0 <code class="inline-code">elseif</code> and no + <code class="inline-code">else</code>:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1> + x is 1 +</#if></pre></div> + + <p><code class="inline-code">if</code> with 0 <code class="inline-code">elseif</code> and + <code class="inline-code">else</code>:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1> + x is 1 +<#else> + x is not 1 +</#if></pre></div> + + <p><code class="inline-code">if</code> with 2 <code class="inline-code">elseif</code> and no + <code class="inline-code">else</code>:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1> + x is 1 +<#elseif x == 2> + x is 2 +<#elseif x == 3> + x is 3 +</#if></pre></div> + + <p><code class="inline-code">if</code> with 3 <code class="inline-code">elseif</code> and + <code class="inline-code">else</code>:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1> + x is 1 +<#elseif x == 2> + x is 2 +<#elseif x == 3> + x is 3 +<#elseif x == 4> + x is 4 +<#else> + x is not 1 nor 2 nor 3 nor 4 +</#if></pre></div> + + <p>To see more about boolean expressions, see: <a href="dgui_template_exp.html">Template Author's Guide/The Template/Expressions</a>.</p> + + <p>You can nest <code class="inline-code">if</code> directives (of + course):</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1> + x is 1 + <#if y == 1> + and y is 1 too + <#else> + but y is not + </#if> +<#else> + x is not 1 + <#if y < 0> + and y is less than 0 + </#if> +</#if></pre></div> + + <div class="callout note"> + <strong class="callout-label">Note:</strong> + + <p>When you want to test if <code class="inline-code">x > 0</code> or + <code class="inline-code">x >= 0</code>, writing <code class="inline-code"><#if x > + 0></code> and <code class="inline-code"><#if x >= 0></code> is + WRONG, as the first <code class="inline-code">></code> will close the + <code class="inline-code">#if</code> tag. To work that around, write + <code class="inline-code"><#if x gt 0></code> or <code class="inline-code"><#if gte + 0></code>. Also note that if the comparison occurs inside + parentheses, you will have no such problem, like <code class="inline-code"><#if + foo.bar(x > 0)></code> works as expected.</p> + </div> + + <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_global.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_import.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/52c070a9/builds/2.3.26-nightly/ref_directive_import.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/ref_directive_import.html b/builds/2.3.26-nightly/ref_directive_import.html new file mode 100644 index 0000000..965f033 --- /dev/null +++ b/builds/2.3.26-nightly/ref_directive_import.html @@ -0,0 +1,153 @@ +<!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>import - 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="import"> +<meta property="og:locale" content="en_US"> +<meta property="og:url" content="http://freemarker.org/docs/ref_directive_import.html"> +<link rel="canonical" href="http://freemarker.org/docs/ref_directive_import.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="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_import.html"><span itemprop="name">import</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","Template Language Reference","Directive Reference","import"];</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="ref_directive_if.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_include.html"><span>Next</span></a></div><div class="title-wrapper"> +<h1 class="content-header header-section1" id="ref_directive_import" itemprop="headline">import</h1> +</div></div><div class="page-menu"> +<div class="page-menu-title">Page Contents</div> +<ul><li><a class="page-menu-link" href="#autoid_96" data-menu-target="autoid_96">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_97" data-menu-target="autoid_97">Description</a></li></ul> </div><a name="ref.directive.import"></a> + + + + +<h2 class="content-header header-section2" id="autoid_96">Synopsis</h2> + + + +<pre class="metaTemplate"><code class="inline-code"><#import <em class="code-color">path</em> as <em class="code-color">hash</em>></code> +</pre> + + + <p>Where:</p> + + <ul> + <li> + <code class="inline-code"><em class="code-color">path</em></code>: The + path of a template. This is an expression that evaluates to a + string. (With other words, it doesn't have to be a fixed string, + it can also be something like, for example, + <code class="inline-code">profile.baseDir + "/menu.ftl"</code>.) + </li> + + <li> + <code class="inline-code"><em class="code-color">hash</em></code>: The + unquoted name of hash variable by which you can access the + namespace. Not an expression. (If you have to import into a + dynamically constructed name, you have to use <a href="app_faq.html#faq_assign_to_dynamic_variable_name">this + trick</a>.) + </li> + </ul> + + + + + +<h2 class="content-header header-section2" id="autoid_97">Description</h2> + + + <p>Imports a library. That is, it creates a new empty namespace, + and then executes the template given with + <code class="inline-code"><em class="code-color">path</em></code> parameter in that + namespace so the template populates the namespace with variables + (macros, functions, ...etc.). Then it makes the newly created + namespace available to the caller with a hash variable. The hash + variable will be created as a plain variable in the namespace used + by the caller of <code class="inline-code">import</code> (as if you would create + it with <code class="inline-code">assign</code> directive), with the name given + with the <code class="inline-code"><em class="code-color">hash</em></code> + parameter. If the import happens in the namespace of the main + template, the hash variable is also created in the global + namespace.</p> + + <p>If you call <code class="inline-code">import</code> with the same + <code class="inline-code"><em class="code-color">path</em></code> for multiple + times, it will create the namespace and run the template for the + very first call of <code class="inline-code">import</code> only. The later calls + will just create a hash by which you can access the + <em>same</em> namespace.</p> + + <p>The output printed by the imported template will be ignored + (will not be inserted at the place of importing). The template is + executed to populate the namespace with variables, and not to write + to the output.</p> + + <p>Example:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#import "/libs/mylib.ftl" as my> + +<@my.copyright date="1999-2002"/></pre></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">"foo.ftl"</code> + and <code class="inline-code">"../foo.ftl"</code>, or an absolute like + <code class="inline-code">"/foo.ftl"</code>. Relative paths are relative to the + directory of the template that uses the <code class="inline-code">import</code> + directive. Absolute paths are relative to a base (often referred as + the ''root directory of the templates'') that the programmer defines + when he configures FreeMarker.</p> + + <p>Always use <code class="inline-code">/</code> (slash) to separate path + components, never <code class="inline-code">\</code> (backslash). If you are + loading templates from your local file system and it uses + backslashes (like under. Windows), FreeMarker will convert them + automatically.</p> + + <p>Like with the <code class="inline-code">include</code> directive, <a href="ref_directive_include.html#ref_directive_include_acquisition">acquisition</a> and + <a href="ref_directive_include.html#ref_directive_include_localized">localized + lookup</a> may be used for resolving the path.</p> + + <p><span class="marked-for-programmers">Note, that it is possible to + automatically do the commonly used imports for all templates, with + the "auto imports" setting of + <code class="inline-code">Configuration</code>.</span></p> + + <p>If you are new to namespaces, you should read: <a href="dgui_misc_namespace.html">Template Author's Guide/Miscellaneous/Namespaces</a></p> + <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_if.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_include.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/52c070a9/builds/2.3.26-nightly/ref_directive_include.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/ref_directive_include.html b/builds/2.3.26-nightly/ref_directive_include.html new file mode 100644 index 0000000..ebfb785 --- /dev/null +++ b/builds/2.3.26-nightly/ref_directive_include.html @@ -0,0 +1,449 @@ +<!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="http://freemarker.org/docs/ref_directive_include.html"> +<link rel="canonical" href="http://freemarker.org/docs/ref_directive_include.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="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 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","Template Language Reference","Directive Reference","include"];</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="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_98" data-menu-target="autoid_98">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_99" data-menu-target="autoid_99">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></ul></li></ul> </div><a name="ref.directive.include"></a> + + + + +<h2 class="content-header header-section2" id="autoid_98">Synopsis</h2> + + + +<pre class="metaTemplate"> +<code class="inline-code"><#include <em class="code-color">path</em>></code> +or +<code class="inline-code"><#include <em class="code-color">path</em> <em class="code-color">options</em>></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't have to be a fixed string, + it can also be something like, for example, + <code class="inline-code">profile.baseDir + "/menu.ftl"</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_99">Description</h2> + + + <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't involve the Servlet container at all, just + processes another FreeMarker template, without "leaving" + FreeMarker. Regarding how to do a "JSP include" <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">"foo.ftl"</code> + and <code class="inline-code">"../foo.ftl"</code>, or an absolute like + <code class="inline-code">"/foo.ftl"</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 'root directory of the templates') + 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-wrapper"><pre class="code-block code-template">Copyright 2001-2002 ${me}<br> +All rights reserved.</pre></div> + + <p>Then this:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#assign me = "Juila Smith"> +<h1>Some test</h1> +<p>Yeah. +<hr> +<strong><#include "/common/copyright.ftl"></strong></pre></div> + + <p>will output this:</p> + + + +<div class="code-wrapper"><pre class="code-block code-output"><h1>Some test</h1> +<p>Yeah. +<hr> +<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'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'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"><#include + ...></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>.</p> + </li> + </ul> + + <p>Example:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#include "/common/navbar.html" parse=false encoding="Shift_JIS"></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 "auto includes" 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's a special path component represented by an asterisk + (<code class="inline-code">*</code>). It is interpreted as "this directory or + any of its parents". Therefore, if the template located in + <code class="inline-code">/foo/bar/template.ftl</code> has the following + line:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#include "*/footer.ftl"></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-wrapper"><pre class="code-block code-template"><#include "*/commons/footer.ftl"></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't be the first element of the + path:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#include "commons/*/footer.ftl"></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'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'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-wrapper"><pre class="code-block code-template"><#include "footer.ftl"></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-wrapper"><pre class="code-block code-template"><#include "*/footer.ftl"></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> + + <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="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/52c070a9/builds/2.3.26-nightly/ref_directive_list.html ---------------------------------------------------------------------- diff --git a/builds/2.3.26-nightly/ref_directive_list.html b/builds/2.3.26-nightly/ref_directive_list.html new file mode 100644 index 0000000..f2e0cbc --- /dev/null +++ b/builds/2.3.26-nightly/ref_directive_list.html @@ -0,0 +1,638 @@ +<!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>list, else, items, sep, break - 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="list, else, items, sep, break"> +<meta property="og:locale" content="en_US"> +<meta property="og:url" content="http://freemarker.org/docs/ref_directive_list.html"> +<link rel="canonical" href="http://freemarker.org/docs/ref_directive_list.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="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_list.html"><span itemprop="name">list, else, items, sep, break</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","Template Language Reference","Directive Reference","list, else, items, sep, break"];</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="ref_directive_include.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_local.html"><span>Next</span></a></div><div class="title-wrapper"> +<h1 class="content-header header-section1" id="ref_directive_list" itemprop="headline">list, else, items, sep, break</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="#autoid_102" data-menu-target="autoid_102">Simplest form</a></li><li><a class="page-menu-link" href="#autoid_103" data-menu-target="autoid_103">else directive</a></li><li><a class="page-menu-link" href="#autoid_104" data-menu-target="autoid_104">items directive</a></li><li><a class="page-menu-link" href="#autoid_105" data-menu-target="autoid_105">sep directive</a></li><li><a class="page-menu-link" href="#autoid_106" data-menu-target="autoid_106">break directive</a></li><li><a class="page-menu-link" href="#autoid_107" data-menu-target="autoid_107">Accessing iteration state</a></li><li><a class="page-menu-link" href="#autoid_108" data-menu-target="autoid_108">Nesting loops into each other</a></li><li><a class="page-menu-link" href="#autoid_109" data-menu- target="autoid_109">Notes for Java programmers</a></li></ul></li></ul> </div><a name="ref.directive.list"></a> + + + + +<h2 class="content-header header-section2" id="autoid_100">Synopsis</h2> + + + <p>The simplest form for listing a sequence (or collection) + is:</p> + + +<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">sequence</em> as <em class="code-color">item</em>> + <em class="code-color">Part repeated for each item</em> +</#list></code></pre> + + + <p>and to list the key-value pairs of a hash (since + 2.3.25):</p> + + +<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">hash</em> as <em class="code-color">key</em>, <em class="code-color">value</em>> + <em class="code-color">Part repeated for each key-value pair</em> +</#list></code></pre> + + + <p>But these are just cases of the generic forms, which are shown + below. Note that for simplicity we only show the generic forms for + sequence listing; simply replace "<code class="inline-code">as + <em class="code-color">item</em></code>" with + "<code class="inline-code">as <em class="code-color">key</em>, + <em class="code-color">value</em></code>" to get the + generic form for hash listing.</p> + + <p>Generic form 1:</p> + + +<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">sequence</em> as <em class="code-color">item</em>> + <em class="code-color">Part repeated for each item</em> +<#else> + <em class="code-color">Part executed when there are 0 items</em> +</#list></code></pre> + + + <p>Where:</p> + + <ul> + <li> + The <code class="inline-code">else</code> part is optional, and is only + supported since FreeMarker 2.3.23. + </li> + + <li> + <code class="inline-code"><em class="code-color">sequence</em></code>: + Expressions evaluates to a sequence or collection of the items + we want to iterate through + </li> + + <li> + <code class="inline-code"><em class="code-color">item</em></code>: Name + of the <a href="dgui_misc_var.html">loop variable</a> (not + an expression) + </li> + + <li> + The various "parts" between the tags can + contain arbitrary FTL (including nested + <code class="inline-code">list</code>-s) + </li> + </ul> + + <p>Generic form 2 (since FreeMarker 2.3.23):</p> + + +<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">sequence</em>> + <em class="code-color">Part executed once if we have more than 0 items</em> + <#items as <em class="code-color">item</em>> + <em class="code-color"> Part repeated for each item</em> + </#items> + <em class="code-color">Part executed once if we have more than 0 items</em> +<#else> + <em class="code-color">Part executed when there are 0 items</em> +</#list></code></pre> + + + <p>Where: see the "Where" section of Form 1 above + (and thus the <code class="inline-code">else</code> part is optional here + too).</p> + + + + + +<h2 class="content-header header-section2" id="autoid_101">Description</h2> + + + + + + + +<h3 class="content-header header-section3" id="autoid_102">Simplest form</h3> + + + <p>Assuming <code class="inline-code">users</code> contains the + <code class="inline-code">['Joe', 'Kate', 'Fred']</code> sequence:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users as user> + <p>${user} +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> <p>Joe + <p>Kate + <p>Fred</pre></div> + + <p>The <code class="inline-code">list</code> directive executes the code + between the <code class="inline-code">list</code> start-tag and + <code class="inline-code">list</code> end-tag (the body of + <code class="inline-code">list</code> from now on) for each value in the + sequence (or collection) specified as its first parameter. For + each such iteration the loop variable (<code class="inline-code">user</code> in + this example) will store the value of the current item.</p> + + <p>The loop variable (<code class="inline-code">user</code>) only exists + inside the <code class="inline-code">list</code> body. Also, macros/functions + called from within the loop won't see it (as if it were a local + variable).</p> + + <p>Listing hashes is very similar, but you need to provide two + variable names after the <code class="inline-code">as</code>; one for the hash + key, and another for the associated value. Assuming + <code class="inline-code">products</code> is <code class="inline-code">{ "apple": 5, "banana": + 10, "kiwi": 15 }</code>:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list products as name, price> + <p>${name}: ${price} +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> <p>apple: 5 + <p>banan: 10 + <p>kiwi: 15</pre></div> + + <p>Note that not all hash variables can be listed, because some + of them isn't able to enumerate its keys. It's practically safe to + assume though that hashes that stand for Java + <code class="inline-code">Map</code> objects can be listed.</p> + + + + + + + +<h3 class="content-header header-section3" id="autoid_103">else directive</h3> + + + <a name="ref.directive.list.else"></a> + + + + <div class="callout note"> + <strong class="callout-label">Note:</strong> + + <p><code class="inline-code">else</code> inside <code class="inline-code">list</code> is + only supported since FreeMarker 2.3.23</p> + </div> + + + <p>The <code class="inline-code">else</code> directive is used if when there + are 0 items, you have to print something special instead of just + printing nothing:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users as user> + <p>${user} +<#else> + <p>No users +</#list></pre></div> + + <p>This outputs the same as the earlier example, except when + <code class="inline-code">users</code> contains 0 items:</p> + + + +<div class="code-wrapper"><pre class="code-block code-output"> <p>No users</pre></div> + + <p>Note that the loop variable (<code class="inline-code">user</code>) + doesn't exist between the <code class="inline-code">else</code> tag and the + <code class="inline-code">list</code> end-tag, since that part is not part of + the loop.</p> + + <p><code class="inline-code">else</code> must be literally (means, in the + source code) inside the body of the <code class="inline-code">list</code> + directive. That is, you can't moved it out into a macro or + included template.</p> + + + + + + + +<h3 class="content-header header-section3" id="autoid_104">items directive</h3> + + + <a name="ref.directive.items"></a> + + + + <div class="callout note"> + <strong class="callout-label">Note:</strong> + + <p><code class="inline-code">items</code> exists since FreeMarker + 2.3.23</p> + </div> + + + <p>The <code class="inline-code">items</code> directive is used if you have + to print (or do) something before the first list item, and after + the last list item, as far as there's at least 1 item. A typical + example:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users> + <ul> + <#items as user> + <li>${user}</li> + </#items> + </ul> +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> <ul> + <li>Joe</li> + <li>Kate</li> + <li>Fred</li> + </ul></pre></div> + + <p>If there are 0 items, the above won't print anything, thus + you don't end up with an empty + <code class="inline-code"><ul></ul></code>.</p> + + <p>That is, when the <code class="inline-code">list</code> directive has no + <code class="inline-code">as <em class="code-color">item</em></code> parameter, + the body of its is executed exactly once if there's at least one + item, or not at all otherwise. It's the body of the mandatory + nested <code class="inline-code">items</code> directive that will be run for + each item, and hence it's also the <code class="inline-code">items</code> + directive that defines the loop variable with <code class="inline-code">as + <em class="code-color">item</em></code>, not + <code class="inline-code">list</code>.</p> + + <p>A <code class="inline-code">list</code> directive with + <code class="inline-code">items</code> also can have an <code class="inline-code">else</code> + directive:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users> + <ul> + <#items as user> + <li>${user}</li> + </#items> + </ul> +<#else> + <p>No users +</#list></pre></div> + + <p>Some further details:</p> + + <ul> + <li> + <p>The parser will check that a <code class="inline-code">list</code> + without <code class="inline-code">as <em class="code-color">item</em></code> + parameter always has a nested <code class="inline-code">items</code> + directive, and that an <code class="inline-code">items</code> directive + always has an enclosing <code class="inline-code">list</code> which has no + <code class="inline-code">as <em class="code-color">item</em></code> + parameter. This is checked when the template is parsed, not + when the template is executed. Thus, these rules apply on the + FTL source code itself, so you can't move + <code class="inline-code">items</code> out into a macro or included + template.</p> + </li> + + <li> + <p>A <code class="inline-code">list</code> can have multiple + <code class="inline-code">items</code> directives, but only one of them will + be allowed to run (as far as you don't leave and re-enter the + enclosing <code class="inline-code">list</code> directive); and further + attempts to call <code class="inline-code">items</code> will cause error. So + multiple <code class="inline-code">items</code> can be utilized on different + <code class="inline-code">if</code>-<code class="inline-code">else</code> branches for + example, but not for iterating twice.</p> + </li> + + <li> + <p><code class="inline-code">items</code> directive can't have its own + nested <code class="inline-code">else</code> directive, only the enclosing + <code class="inline-code">list</code> can have</p> + </li> + + <li> + <p>The loop variable (<code class="inline-code">user</code>) only exists + inside the body of the <code class="inline-code">items</code> + directive.</p> + </li> + </ul> + + + + + + + +<h3 class="content-header header-section3" id="autoid_105">sep directive</h3> + + + <a name="ref.directive.sep"></a> + + + + <div class="callout note"> + <strong class="callout-label">Note:</strong> + + <p><code class="inline-code">sep</code> exists since FreeMarker + 2.3.23</p> + </div> + + + <p><code class="inline-code">sep</code> is used when you have to display + something between each item (but not before the first item or + after the last item). For example:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users as user>${user}<strong><#sep>, </strong></#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output">Joe, Kate, Fred</pre></div> + + <p>Above, <code class="inline-code"><#sep>, </#list></code> is a + shorthand for <code class="inline-code"><#sep>, + </#sep></#list></code>; the <code class="inline-code">sep</code> + end-tag can be omitted if you would put it where the enclosing + directive is closed anyway. In the next example, you couldn't use + such abbreviation (HTML tags close nothing, as they are just raw + text to output for FreeMarker):</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users as user> + <div> + ${user}<strong><#sep>, </#sep></strong> + </div> +</#list></pre></div> + + <p><code class="inline-code">sep</code> is just a shorthand for + <code class="inline-code"><#if + <em class="code-color">item</em>?has_next>...</#if></code>. + Thus, it can be used anywhere where there's a + <code class="inline-code">list</code> or <code class="inline-code">items</code> loop variable + available, it can occur for multiple times, and it can have + arbitrary nested content.</p> + + <p>The parser ensures that <code class="inline-code">sep</code> is only used + on a place where there's a visible loop variable. This happens + earlier than the actual execution of the template. Thus, you can't + move <code class="inline-code">sep</code> from inside the associated + <code class="inline-code">list</code> or <code class="inline-code">items</code> directive into + a macro or included template (the parser can't know where those + will be called from).</p> + + + + + + + +<h3 class="content-header header-section3" id="autoid_106">break directive</h3> + + + <a name="ref.directive.list.break"></a> + + + + <p>You can exit the iteration at any point with the + <code class="inline-code">break</code> directive. For example:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list 1..10 as x> + ${x} + <#if x == 3> + <strong><#break></strong> + </#if> +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> 1 + 2 + 3</pre></div> + + <p>The <code class="inline-code">break</code> directives can be placed + anywhere inside <code class="inline-code">list</code> as far as it has + <code class="inline-code">as <em class="code-color">item</em></code> parameter, + otherwise it can be placed anywhere inside the + <code class="inline-code">items</code> directive. If the + <code class="inline-code">break</code> is inside <code class="inline-code">items</code>, it + will only exit from <code class="inline-code">items</code>, not from + <code class="inline-code">list</code>. In general, <code class="inline-code">break</code> will + only exit from the directive whose body is called for each item, + and can only be placed inside such directive. So for example can't + use <code class="inline-code">break</code> inside <code class="inline-code">list</code>'s + <code class="inline-code">else</code> section, unless there's the + <code class="inline-code">list</code> is nested into another + <code class="inline-code">break</code>-able directive.</p> + + <p>Just like <code class="inline-code">else</code> and + <code class="inline-code">items</code>, <code class="inline-code">break</code> must be + literally inside body of the directive to break out from, and + can't be moved out into a macro or included template.</p> + + + + + + + +<h3 class="content-header header-section3" id="autoid_107">Accessing iteration state</h3> + + + + + + + <p>Starting from 2.3.23, <a href="ref_builtins_loop_var.html">loop variable built-ins</a> is + the preferred way of accessing current state of the iteration. For + example, here we use the <code class="inline-code">counter</code> and + <code class="inline-code">item_parity</code> loop variable built-ins (see all of + them <a href="ref_builtins_loop_var.html">in the + Reference</a>):</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list users> + <table> + <#items as user> + <tr class="${user<strong>?item_parity</strong>}Row"> + <td>${user<strong>?counter</strong>} + <td>${user} + </#items> + </table> +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> <table> + <tr class="<strong>odd</strong>Row"> + <td><strong>1</strong> + <td>Joe + <tr class="<strong>even</strong>Row"> + <td><strong>2</strong> + <td>Kate + <tr class="<strong>odd</strong>Row"> + <td><strong>3</strong> + <td>Fred + </table></pre></div> + + <p>In 2.3.22 and earlier, there were two extra loop variables + to retrieve the iteration state instead (and they still exist for + backward compatibility):</p> + + <ul> + <li> + <p><code class="inline-code"><em class="code-color">item</em>_index</code> + (<em>deprecated</em> by + <code class="inline-code"><em class="code-color">item</em>?index</code>): The + index (0-based number) of the current item in the loop.</p> + </li> + + <li> + <p><code class="inline-code"><em class="code-color">item</em>_has_next</code> + (<em>deprecated</em> by + <code class="inline-code"><em class="code-color">item</em>?has_next</code>): + Boolean value that tells if the current item is the last in + the sequence or not.</p> + </li> + </ul> + + <p>so in the above example, you could replace + <code class="inline-code">${user?counter}</code> with <code class="inline-code">${user_index + + 1}</code>.</p> + + + + + + + +<h3 class="content-header header-section3" id="autoid_108">Nesting loops into each other</h3> + + + <p>Naturally, <code class="inline-code">list</code> or + <code class="inline-code">items</code> can contain further + <code class="inline-code">list</code>-s:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list 1..2 as i> + <#list 1..3 as j> + i = ${i}, j = ${j} + </#list> +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> i = 1, j = 1 + i = 1, j = 2 + i = 1, j = 3 + i = 2, j = 1 + i = 2, j = 2 + i = 2, j = 3</pre></div> + + <p>It's also allowed to use clashing loop variable names + like:</p> + + + +<div class="code-wrapper"><pre class="code-block code-template"><#list 1..2 as i> + Outer: ${i} + <#list 10..12 as i> + Inner: ${i} + </#list> + Outer again: ${i} +</#list></pre></div> + + + +<div class="code-wrapper"><pre class="code-block code-output"> Outer: 1 + Inner: 10 + Inner: 11 + Inner: 12 + Outer again: 1 + Outer: 2 + Inner: 10 + Inner: 11 + Inner: 12 + Outer again: 2</pre></div> + + + + + + + +<h3 class="content-header header-section3" id="autoid_109">Notes for Java programmers</h3> + + + <p><span class="marked-for-programmers">If classic compatible mode + <code class="inline-code">list</code> accepts a scalar too and treats it as a + single-element sequence.</span></p> + + <p><span class="marked-for-programmers">If you pass an collection that + wraps an <code class="inline-code">java.util.Iterator</code> to the + <code class="inline-code">list</code>, you can iterate over its elements only + once, since <code class="inline-code">Iterator</code>s are by their nature + one-off objects. When you try to list a such collection variable + for the second time, an error will abort template + processing.</span></p> + + <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_include.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_local.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>
