| <!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>Alternative (square bracket) syntax - 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="Alternative (square bracket) syntax"> |
| <meta property="og:locale" content="en_US"> |
| <meta property="og:url" content="https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html"> |
| <link rel="canonical" href="https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html"> |
| <link rel="icon" href="favicon.png" type="image/png"> |
| <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono"> |
| <link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1707770044859"> |
| <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cookie-bar/cookiebar-latest.min.js"></script> |
| </head> |
| <body itemscope itemtype="https://schema.org/Code"> |
| <meta itemprop="url" content="https://freemarker.apache.org/docs/"> |
| <meta itemprop="name" content="Apache FreeMarker Manual"> |
| |
| <!--[if lte IE 9]> |
| <div class="oldBrowserWarning" style="display: block"> |
| Unsupported web browser - Use a modern browser to view this website! |
| </div> |
| <![endif]--> <div class="oldBrowserWarning"> |
| Unsupported web browser - Use a modern browser to view this website! |
| </div> |
| <div class="header-top-bg"><div class="site-width header-top"><div id="hamburger-menu" role="button"></div> <div class="logo"> |
| <a href="https://freemarker.apache.org" role="banner"><img itemprop="image" src="logo.png" alt="FreeMarker"></a> </div> |
| <ul class="tabs"><li><a href="https://freemarker.apache.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="https://freemarker.apache.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/projects/FREEMARKER" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="https://freemarker.apache.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="search-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"> <div class="breadcrumbs"> |
| <ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_alternativesyntax.html"><span itemprop="name">Alternative (square bracket) syntax</span></a></li></ul> </div> |
| <div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width"> |
| <div class="content-wrapper"> |
| <div id="table-of-contents-wrapper" class="col-left"> |
| <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","Alternative (square bracket) syntax"];</script> |
| <script src="toc.js?1707770044859"></script> |
| <script src="docgen-resources/main.min.js?1707770044859"></script> |
| </div> |
| <div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_whitespace.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui.html"><span>Next</span></a></div><div class="title-wrapper"> |
| <h1 class="content-header header-section1" id="dgui_misc_alternativesyntax" itemprop="headline">Alternative (square bracket) syntax</h1> |
| </div></div><div class="page-menu"> |
| <div class="page-menu-title">Page Contents</div> |
| <ul><li><a class="page-menu-link" href="#dgui_misc_alternativesyntax_tag" data-menu-target="dgui_misc_alternativesyntax_tag">Square bracket tag syntax</a></li><li><a class="page-menu-link" href="#dgui_misc_alternativesyntax_interpolation" data-menu-target="dgui_misc_alternativesyntax_interpolation">Square bracket interpolation syntax</a></li></ul> </div><p>Sometimes the generated content uses symbols that clashes with |
| the default FreeMarker syntax (typically, |
| <code class="inline-code">${<em class="code-color">...</em>}</code>-s that FreeMarker |
| should print as is, without interpretation), or you use some tool that |
| is confused by the default FreeMarker syntax (typically by |
| <code class="inline-code"><</code> and <code class="inline-code">></code>). While usually |
| there are tricks to work those cases around (like you can use |
| <code class="inline-code">${'$'}{x}</code> to print <code class="inline-code">${x}</code> as is) , |
| they are often too inconvenient. Thus, the interpolation syntax can be |
| configured to be like <code class="inline-code">[=x]</code> instead of |
| <code class="inline-code">${x}</code>. Also, independently of that, the FreeMarker |
| tag syntax can be configured to use <code class="inline-code">[]</code>, like in |
| <code class="inline-code">[#if x]<em class="code-color">...</em>[/#if]</code>.</p> <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>While both the "tag syntax" and |
| "interpolation syntax" can be configured to use square |
| brackets, they are totally independent configuration settings. Thus, |
| the overall syntax can be like <code class="inline-code">[#if x]${y}[/#if]</code>, |
| or like <code class="inline-code"><#if x>[=y]</#if></code> as |
| well.</p> |
| </div> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="dgui_misc_alternativesyntax_tag">Square bracket tag syntax</h2> |
| |
| |
| <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>This section is about the <em>tag</em> syntax, |
| not the <a href="#dgui_misc_alternativesyntax_interpolation"><em>interpolation</em> |
| syntax</a>. Don't confuse the two, they are independent.</p> |
| </div> |
| |
| |
| <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>This feature exists since FreeMarker 2.3.4.</p> |
| </div> |
| |
| |
| <p>FreeMarker supports an alternative tag syntax, where |
| <code class="inline-code">[</code> and <code class="inline-code">]</code> is used instead of |
| <code class="inline-code"><</code> and <code class="inline-code">></code> in FreeMarker |
| directives and comments, for example:</p> |
| |
| <ul> |
| <li> |
| Calling predefined directive: <code class="inline-code">[#list animals as |
| animal]<em class="code-color">...</em>[/#list]</code> |
| </li> |
| |
| <li> |
| Calling user-defined directive: <code class="inline-code">[@myMacro |
| /]</code> |
| </li> |
| |
| <li> |
| Comment: <code class="inline-code">[#-- the comment --]</code> |
| </li> |
| </ul> |
| |
| <p>To use square tag syntax instead of the default one, the |
| programmers should configure FreeMarker so <span class="marked-for-programmers">(see |
| <code class="inline-code">Configuraton.setTagSyntax</code>, or the |
| <code class="inline-code">tag_syntax</code> setting)</span>. However, the tag |
| syntax can also be enforced in the template, with the <a href="ref_directive_ftl.html"><code>ftl</code> directive</a> |
| (see later).</p> |
| |
| <p>For example, this is how the last example of the <a href="dgui_quickstart_template.html">Getting Started</a> looks with |
| the alternative syntax:</p> |
| |
| |
| |
| <div class="code-block role-template"> |
| <div class="code-block-label">Template</div><pre class="code-block-body"><p>We have these animals: |
| <table border=1> |
| <tr><th>Name<th>Price |
| <strong>[#list animals as animal]</strong> |
| <tr> |
| <td> |
| <strong>[#if animal.size == "large"]</strong><b><strong>[/#if]</strong> |
| ${animal.name} |
| <strong>[#if animal.size == "large"]</strong></b><strong>[/#if]</strong> |
| <td>${animal.price} Euros |
| <strong>[/#list]</strong> |
| </table></pre> </div> |
| |
| |
| <p>The square bracket and the default (angle bracket) syntax are |
| mutually exclusive within a template; they can't be mixed. If the |
| template uses square bracket tag syntax, then things like |
| <code class="inline-code"><#if <em class="code-color">...</em>></code> will |
| be just static text, not FTL tags. Similarly, if the template uses |
| the angle brackets tag syntax, things like <code class="inline-code">[#if |
| <em class="code-color">...</em>]</code> are static text, not FTL |
| tags.</p> |
| |
| <p>If you start the file with <code class="inline-code">[#ftl |
| <em class="code-color">...</em>]</code> (where the |
| <code class="inline-code"><em class="code-color">...</em></code> stands for the |
| optional parameters; of course <code class="inline-code">[#ftl]</code> works too) |
| the file will use square bracket <em>tag</em> syntax |
| regardless of the configuration settings (but that does |
| <em>not</em> change the interpolation syntax to |
| <code class="inline-code">[=...]</code>). Similarly, if you start the file with |
| <code class="inline-code"><#ftl <em class="code-color">...</em>></code> the |
| file will use the normal (angle bracket) tag syntax. If there is no |
| <code class="inline-code">ftl</code> directive in the file, then the programmer |
| decides what the tag <em>syntax</em> will be by |
| configuring FreeMarker <span class="marked-for-programmers">(programmers |
| see <code class="inline-code">Configuration.setTagSyntax(int)</code> in the API |
| javadocs)</span>. Most probably the programmers use the factory |
| default.</p> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="dgui_misc_alternativesyntax_interpolation">Square bracket interpolation syntax</h2> |
| |
| |
| <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>This section is about the <em>interpolation</em> |
| syntax, not the <a href="#dgui_misc_alternativesyntax_tag"><em>tag</em> |
| syntax</a>. Don't confuse the two, they are independent.</p> |
| </div> |
| |
| |
| <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>This feature exists since FreeMarker 2.3.28</p> |
| </div> |
| |
| |
| <p>In this case instead of |
| <code class="inline-code">${<em class="code-color">expression</em>}</code> (and the |
| deprecated |
| <code class="inline-code">#{<em class="code-color">expression</em>}</code>) you |
| write <code class="inline-code">[=<em class="code-color">expression</em>]</code>. |
| This syntax is activated by the programmers from the configuration |
| <span class="marked-for-programmers">(see |
| <code class="inline-code">Configuration.setInterpolationSyntax</code> in the Java |
| API)</span>; unlike the tag syntax, it can't be specified inside |
| the template. It can be used both together with, and without the |
| <a href="#dgui_misc_alternativesyntax_tag">square bracket |
| <em>tag</em> syntax</a>, as they are technically |
| unrelated, but it's probably more aesthetic to use square bracket |
| tag syntax when you use square bracket interpolation syntax:</p> |
| |
| |
| |
| <div class="code-block role-template"> |
| <div class="code-block-label">Template</div><pre class="code-block-body">[#-- |
| Note: |
| This example uses both interpolation_syntax=squareBracket and tag_syntax=squareBracket, |
| but you can also use interpolation_syntax=squareBracket and tag_syntax=angleBracket. |
| --] |
| <p>We have these animals: |
| <table border=1> |
| <tr><th>Name<th>Price |
| [#list animals as animal] |
| <tr> |
| <td> |
| [#if animal.size == "large"]<b>[/#if] |
| <strong>[=animal.name]</strong> |
| [#if animal.size == "large"]</b>[/#if] |
| <td><strong>[=animal.price]</strong> Euros |
| [/#list] |
| </table></pre> </div> |
| |
| |
| <p>When square bracket interpolation syntax is used, |
| <code class="inline-code">${<em class="code-color">expression</em>}</code> and |
| <code class="inline-code">#{<em class="code-color">expression</em>}</code> in the |
| template will be just static text, which is printed as is. This is |
| mostly useful if you generate output that should contain those |
| (especially |
| <code class="inline-code">${<em class="code-color">expression</em>}</code> is |
| frequent), such as when generating JSP files.</p> |
| |
| <p>There's also a third tag syntax, "dollar", where |
| only the interpolation syntax is |
| <code class="inline-code">${<em class="code-color">expression</em>}</code>, and the |
| deprecated |
| <code class="inline-code">#{<em class="code-color">expression</em>}</code> is just |
| static text. (The one where |
| <code class="inline-code">#{<em class="code-color">expression</em>}</code> is still |
| an interpolation is called the "legacy" interpolation |
| syntax, and is the default for backward compatibility.)</p> |
| <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_whitespace.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui.html"><span>Next</span></a></div></div></div></div> </div> |
| </div> |
| <div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="https://freemarker.apache.org/">What is FreeMarker?</a></li><li><a href="https://freemarker.apache.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="app_faq.html">FAQ</a></li><li><a itemprop="license" href="app_license.html">License</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy policy</a></li></ul></div><div class="column"><h3 class="column-header">Often used / Reference</h3><ul><li><a href="https://try.freemarker.apache.org/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li><li><a href="api/freemarker/core/Configurable.html#setSetting-java.lang.String-java.lang.String-">Configuration settings</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href="https://github.com/apache/freemarker">Github project page</a></li><li><a href="https://issues.apache.org/jira/projects/FREEMARKER">Report a bug</a></li><li><a href="https://freemarker.apache.org/report-security-vulnerabilities.html">Report security vulnerability</a></li><li><a href="https://stackoverflow.com/questions/ask?tags=freemarker">Get help on StackOverflow</a></li><li><a href="https://twitter.com/freemarker">Announcements on Twitter</a></li><li><a href="https://freemarker.apache.org/mailing-lists.html">Discuss on mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/apache/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="https://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated"> |
| Last generated: |
| <time itemprop="dateModified" datetime="2024-02-12T20:34:04Z" title="Monday, February 12, 2024 at 8:34:04 PM Greenwich Mean Time">2024-02-12 20:34:04 GMT</time>, for Freemarker 2.3.32 </p> |
| <p class="copyright"> |
| © <span itemprop="copyrightYear">1999</span>–2024 |
| <a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="https://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners. </p> |
| </div></div></div></body> |
| </html> |