| <!doctype html> |
| <!-- Generated by FreeMarker/Docgen from DocBook --> |
| <html lang="en" class="page-type-section"> |
| <head prefix="og: http://ogp.me/ns#"> |
| <meta charset="utf-8"> |
| <title>Basics - Apache FreeMarker Manual</title> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <meta name="format-detection" content="telephone=no"> |
| <meta property="og:site_name" content="Apache FreeMarker Manual"> |
| <meta property="og:title" content="Basics"> |
| <meta property="og:locale" content="en_US"> |
| <meta property="og:url" content="https://freemarker.apache.org/docs/dgui_datamodel_basics.html"> |
| <link rel="canonical" href="https://freemarker.apache.org/docs/dgui_datamodel_basics.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_datamodel.html"><span itemprop="name">Values, Types</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel_basics.html"><span itemprop="name">Basics</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","Values, Types","Basics"];</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_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_types.html"><span>Next</span></a></div><div class="title-wrapper"> |
| <h1 class="content-header header-section1" id="dgui_datamodel_basics" itemprop="headline">Basics</h1> |
| </div></div><div class="page-menu"> |
| <div class="page-menu-title">Page Contents</div> |
| <ul><li><a class="page-menu-link" href="#topic.value" data-menu-target="topic.value">What is a value?</a></li><li><a class="page-menu-link" href="#autoid_9" data-menu-target="autoid_9">What is type?</a></li><li><a class="page-menu-link" href="#autoid_10" data-menu-target="autoid_10">The data-model is a hash</a></li></ul> </div> <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>It is assumed that you have already read the <a href="dgui_quickstart.html">Getting Started</a> chapter.</p> |
| </div> |
| <p>Understanding the concept of values and types is crucial for the |
| understanding of data-models. However, the concept of values and types |
| is not confined to data-models, as you will see.</p> |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="topic.value">What is a value?</h2> |
| |
| |
| |
| |
| <p><span class="marked-for-programmers">Real programmers can safely skip |
| this section.</span></p> |
| |
| <p>Examples of <em>values</em> as you know the term |
| from the everyday math are 16, 0.5, and so on, i.e. numbers. In the |
| case of computer languages the value term has a wider meaning, as a |
| value needn't be a number. For example, take this data-model:</p> |
| |
| |
| |
| <div class="code-block role-data-model"> |
| <div class="code-block-label">Data Model</div><pre class="code-block-body"><a name="example.stdDataModel"></a>(root) |
| | |
| +- user = "Big Joe" |
| | |
| +- today = Jul 6, 2007 |
| | |
| +- todayHoliday = false |
| | |
| +- lotteryNumbers |
| | | |
| | +- (1st) = 20 |
| | | |
| | +- (2nd) = 14 |
| | | |
| | +- (3rd) = 42 |
| | | |
| | +- (4th) = 8 |
| | | |
| | +- (5th) = 15 |
| | |
| +- cargo |
| | |
| +- name = "coal" |
| | |
| +- weight = 40</pre> </div> |
| |
| |
| <p>We say that the <em>value</em> of the the |
| <code class="inline-code">user</code> variable is "Big Joe" (a string), the |
| <em>value</em> of <code class="inline-code">today</code> is Jul 6, |
| 2007 (a date), the <em>value</em> of |
| <code class="inline-code">todayHoliday</code> is false (a boolean, ie. a yes/no |
| thing). The <em>value</em> of |
| <code class="inline-code">lotteryNumbers</code> is the sequence that contains 20, |
| 14, 42, 8, 15. Surely <code class="inline-code">lotteryNumbers</code> is multiple |
| values in the sense that it <em>contains</em> multiple |
| values (for example, the 2nd item in it is a the |
| <em>value</em> 14), but still, |
| <code class="inline-code">lotteryNumbers</code> itself is a single value. It's |
| like a box that contains many other items; the whole box can be seen |
| as a single item. Last not least we also have the |
| <em>value</em> of <code class="inline-code">cargo</code>, which is a |
| hash (a box-like thing again).So, a value is something that can be |
| stored in a variable (e.g., in <code class="inline-code">user</code> or |
| <code class="inline-code">cargo</code> or <code class="inline-code">cargo.name</code>). But a |
| value need not be stored in a variable to be called a value, for |
| example we have the value 100 here:</p> |
| |
| |
| |
| <div class="code-block role-template"> |
| <div class="code-block-label">Template</div><pre class="code-block-body"><#if cargo.weight < <strong>100</strong>>Light cargo</#if></pre> </div> |
| |
| |
| <p>The temporaly result of a calculations are also called values, |
| like 20 and 120 when this template is executed (it will print |
| 120):</p> |
| |
| |
| |
| <div class="code-block role-template"> |
| <div class="code-block-label">Template</div><pre class="code-block-body">${cargo.weight / 2 + 100}</pre> </div> |
| |
| |
| <p>Explanation for this last: As the result of dividing the two |
| values, 40 (the weight of the cargo) and 2, a new value 20 is |
| created. Then 100 is added to it, so the value 120 is created. Then |
| 120 is printed |
| (<code class="inline-code">${<em class="code-color">...</em>}</code>), and the |
| template execution goes on and all these values gone.</p> |
| |
| <p>Certainly now you feel what the value term means.</p> |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_9">What is type?</h2> |
| |
| |
| <p>Values have an important aspect, their type. For example the |
| type of the value of the <code class="inline-code">user</code> variable is string, |
| and the type of the value of the <code class="inline-code">lotteryNumbers</code> |
| variable is sequence. The type of a value is important because it |
| determines to a large extent how and where you can use the value. |
| Like <code class="inline-code">${user / 2}</code> is an error, but |
| <code class="inline-code">${cargo.weight / 2}</code> works and prints 20, since |
| division only does make sense for a number, but not for a string. |
| Or, using dot like in <code class="inline-code">cargo.name</code> does make sense |
| only if <code class="inline-code">cargo</code> is a hash. Or, you can list with |
| <code class="inline-code"><#list <em class="code-color">...</em>></code> |
| sequences only. Or, the condition of <code class="inline-code"><#if |
| ...></code> must be a boolean. And so on.</p> |
| |
| <div class="callout note"> |
| <strong class="callout-label">Note:</strong> |
| |
| <p>A little terminology... Saying "a boolean" or "a boolean |
| value" or "a value of type boolean" are all the same.</p> |
| </div> |
| |
| |
| <p><a name="topic.multitype"></a>A value can have multiple types at the same time, |
| although it's rarely utilized. For example in the data-model below |
| <code class="inline-code">mouse</code> is both a string and a hash:</p> |
| |
| |
| |
| <div class="code-block role-data-model"> |
| <div class="code-block-label">Data Model</div><pre class="code-block-body">(root) |
| | |
| +- mouse = "Yerri" |
| | |
| +- age = 12 |
| | |
| +- color = "brown"</pre> </div> |
| |
| |
| <p>If you merge this template with the above data-model:</p> |
| |
| |
| |
| <div class="code-block role-template"> |
| <div class="code-block-label">Template</div><pre class="code-block-body">${mouse} <#-- uses mouse as a string --> |
| ${mouse.age} <#-- uses mouse as a hash --> |
| ${mouse.color} <#-- uses mouse as a hash --></pre> </div> |
| |
| |
| <p>the output will be:</p> |
| |
| |
| |
| <div class="code-block role-output"> |
| <div class="code-block-label">Output</div><pre class="code-block-body">Yerri |
| 12 |
| brown</pre> </div> |
| |
| |
| |
| |
| |
| |
| <h2 class="content-header header-section2" id="autoid_10">The data-model is a hash</h2> |
| |
| |
| <p>Looking at the various data-model examples you may already |
| realized: the thing marked as "(root)" is just a value of type hash. |
| When you write something like <code class="inline-code">user</code>, that means |
| that you want the "user" variable stored in the root hash. Like if |
| you were writing <code class="inline-code">root.user</code>, except that there is |
| no variable called "root" so that wouldn't work.</p> |
| |
| <p>Some may get confused by the fact that our example data-model, |
| that is, the root hash, contains further hashes and sequences |
| (<code class="inline-code">lotteryNumbers</code> and <code class="inline-code">cargo</code>). |
| There is nothing special in that. A hash contains other variables, |
| and those variables have a value, which can be a string, a number, |
| etc., and of course it can be a hash or sequence as well. Because, |
| as it was explained earlier, a sequence or a hash is just a value, |
| like a string or a number is.</p> |
| <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_types.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> |