什么是 FreeMarker?
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
定义变量
<#assign name1=value1 name2=value2 ... nameN=valueN>
或<#assign same as above... in namespacehash>
或<#assign name> capture this </#assign>
或<#assign name in namespacehash> capture this </#assign>
include 标签引入其他文件模板文件
<#include "/copyright_footer.html">
if elseif else 标签使用
<#if condition>
</#if>
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#elseif animals.elephant.price < animals.python.price>
Elephants are cheaper than pythons today.
<#else>
Elephants and pythons cost the same today.
</#if>
list标签遍历数组
<ul>
<#list misc.fruits as fruit>
<li>${fruit}
</#list>
</ul>
以上遍历在数组为空的情况下,会生成<ul></ul>标签。再有些情况下,我们希望避免此类情况。我们可以这样遍历数组,如下代码:
<#list misc.fruits>
<ul>
<#items as fruit>
<li>${fruit}
</#items>
</ul>
</#list>
如果我们想要输出<p>Fruits: orange, banana类型格式数据
那么我们该如何遍历数组呢?强大的freemarker也提供了支持,请看如下代码:
<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, </#list>
注意:<#sep>, </#sep>,只有当集合List还有下一个元素时,标签语言才会被执行,保证最后一个没有,。
如果集合为空时,会输出<p>Fruits:,此时是我们不想要的结果,list标签还有类似if标签的功能,也可以使用else标签。
<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, <#else>None</#list>
实现类似的功能我们还可以这样写:
<p>Fruits: ${fruits?join(", ", "None")}
就是如此简单。
最后我们可以综合使用以上标签:list
, items
, sep
, else
<#list misc.fruits>
<p>Fruits:
<ul>
<#items as fruit>
<li>${fruit}<#sep> and</#sep>
</#items>
</ul>
<#else>
<p>We have no fruits.
</#list>
处理null值,或者误输入不存在的数据模型model,设置默认值,我们该如何处理呢?用!。
<h1>Welcome ${user!"visitor"}!</h1>
如果我们想判断这个变量是否丢失或者不存在的情况。我们可以在这个变量后面添加双问号??,譬如如下:
<#if user??><h1>Welcome ${user}!</h1></#if>
字符串内置函数:
英文文档参考:https://freemarker.apache.org/docs/ref_builtins_string.html
中文文档参考:http://freemarker.foofun.cn/ref_builtins_string.html
以上是我工作常用的标签指令。
详细更多可以参考中文官网:http://freemarker.foofun.cn/index.html,