FreeMarker学习系列之一

一. 基本概念

  • ${...}: FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式插值

  • FTL 标签 (FreeMarker模板的语言标签): FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。 这些标签的名字以 # 开头。(用户自定义的FTL标签则需要使用 @ 来代替 #)

基本指令

if指令

使用 if 指令可以有条件地跳过模板的一些片段。 

 1 <html>
 2 <head>
 3   <title>Welcome!</title>
 4 </head>
 5 <body>
 6   <h1>
 7     Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!
 8   </h1>
 9   <p>Our latest product:
10   <a href="${latestProduct.url}">${latestProduct.name}</a>!
11 </body>
12 </html>
1 <#if animals.python.price < animals.elephant.price>
2   Pythons are cheaper than elephants today.
3 <#else>
4   Pythons are not cheaper than elephants today.
5 </#if>

list 指令

当需要列表显示内容时,list指令是必须的.list 指令的一般格式为: <#list sequence as loopVariable>repeatThis</#list>

1 <ul>
2     <#list misc.fruits as fruit>
3       <li>${fruit}</li>
4     </#list>
5 </ul>

上面示例中的一个问题是如果我们有0个水果,它仍然会输出一个空的 <ul></ul>,而不是什么都没有。 要避免这样的情况,可以这么来使用 list

1 <#list misc.fruits>
2       <ul>
3         <#items as fruit>
4           <li>${fruit}
5         </#items>
6   </ul>
7 </#list>

include 指令

使用 include 指令, 我们可以在模板中插入其他文件的内容

我们可以将版权信息单独存放在页面文件 copyright_footer.html 中:

1 <hr>
2 <i>
3     Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
4     <br>
5     All Rights Reserved.
6 </i>

当需要用到这个文件时,可以使用 include 指令来插入:

 1 <html>
 2     <head>
 3       <title>Test page</title>
 4     </head>
 5     <body>
 6       <h1>Test page</h1>
 7       <p>Blah blah...
 8       <#include "/copyright_footer.html">
 9     </body>
10 </html>    

处理不存在的变量

这部分对程序员而言: 一个不存在的变量和一个是 null 值的变量, 对于FreeMarker来说是一样的,所以这里所指的"丢失"包含这两种情况。

不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况, 通过在变量名后面跟着一个 !和默认值。

eg:当 user 不存在于数据模型时, 模板将会将 user 的值表示为字符串 "visitor"。(当 user 存在时, 模板就会表现出 ${user} 的值):

 1 <h1>Welcome ${user!"visitor"}!</h1> 

也可以在变量名后面通过放置 ?? 来询问一个变量是否存在。将它和 if 指令合并, 那么如果 user 变量不存在的话将会忽略整个问候的代码段:

 1 <#if user??><h1>Welcome ${user}!</h1></#if> 

在实际应用中,表示menus存在同时menus的长度size必须大于0

 FTL是区分大小写的。 list 是指令的名称而 List 就不是。类似地 ${name} 和 ${Name} 或 ${NAME} 也是不同的。

原文地址:https://www.cnblogs.com/seanRay/p/11954713.html