FreeMarker 的经常使用指令介绍

1、数据类型:html

四种基本类型:String、Number、Boolean、Date。直接指定值能够是字符串、数值、布尔值、集合及Map对象spring

1. 字符串
直接指定字符串值使用单引号或双引号限定。字符串中可使用转义字符”\"。若是字符串内有大量的特殊字符,则能够在引号的前面加上一个字母r,则字符串内的全部字符都将直接输出。
2. 数值
数值能够直接输入,不须要引号。FreeMarker不支持科学计数法。
3. 布尔值
直接使用truefalse,不使用引号。
4. 集合
集合用中括号包括,集合元素之间用逗号分隔。
使用数字范围也能够表示一个数字集合,如1..5等同于集合[1, 2, 3, 4, 5];一样也能够用5..1来表示[5, 4, 3, 2, 1]
5. Map对象
Map对象使用花括号包括,Map中的key-value对之间用冒号分隔,多组key-value对之间用逗号分隔。
注意:Map对象的keyvalue都是表达式,但key必须是字符串。{"name":"green mouse", "price":150} 函数

6. 时间对象测试

root.put("date1", new Date());编码

${date1?string("yyyy-MM-dd HH:mm:ss")}spa

2、控制语句.net

 if指令 orm

这是一个典型的分支控制指令,该指令的做用彻底相似于Java语言中的if,if指令的语法格式以下: 
<#if condition>... 
    <#elseif condition>... 
    <#elseif condition>... 
  <#else> ... 
</#if> 

例子以下: 
<#assign age=23> 
<#if (age>60)>老年人 
        <#elseif (age>40)>中年人 
        <#elseif (age>20)>青年人 
    <#else> 少年人 
</#if> 
输出结果是:青年人 
上面的代码中的逻辑表达式用括号括起来主要是由于里面有“>”符号,因为FreeMarker会将>符号当成标签的结束字符,可能致使程序出错,为了不这种状况,咱们应该在凡是出现这些符号的地方都使用括号。htm

自定义指令(macro指令)对象

<#macro m1>   <#--定义指令m1 -->

<b>aaabbbccc</b>

<b>dddeeefff</b>

</#macro>

<@m1 /><@m1 />  <#--调用上面的宏指令 -->

输出:aaabbbccc

         dddeeefff

定义带参的宏指令:

<#macro m2 a b c >

${a}--${b}--${c}

</#macro>

<@m2 a="老高" b="老张" c="老马" />

nested指令:

<#macro border> 

  <table border=4 cellspacing=0 cellpadding=4><tr><td> 

    <#nested> 

  </td></tr></table> 

</#macro>

<@border >表格中的内容!</@border>

include指令:

<#include "included.txt" />

3、集合操做

list, break 

语法 
<#list  sequence  as item > 
... 
<#if item = "spring"><#break></#if> 
... 
</#list> 

关键字 
item_index: 是list当前值的下标 
item_has_next: 判断list是否还有值 

用例 
<#assign seq = ["winter", "spring", "summer", "autumn"]> 
<#list seq as x> 
  ${x_index + 1}. ${x}<#if x_has_next>,</#if> 

</#list> 

输出 
  1. winter, 
  2. spring, 
  3. summer, 
  4. autumn  

4、空值处理

FreeMarker的变量必须赋值,不然就会抛出异常。

而对于FreeMarker来讲,null值和不存在的变量是彻底同样的,由于FreeMarker没法理解null值。

FreeMarker提供两个运算符来避免空值:

1. !: 指定缺失变量的默认值;

2. ??:判断变量是否存在。

!运算符有两种用法:variable!或variable!defaultValue。第一种用法不给变量指定默认值,代表默认值是空字符串、长度为0的集合、或长度为0的Map对象。

使用variable!defaultValue运算符指定默认值并不要求默认值的类型和变量类型相同。

测试空值处理:

<#-- ${sss} 没有定义这个变量,会报异常! -->

${sss!} <#--没有定义这个变量,默认值是空字符串! -->

${sss!"abc"} <#--没有定义这个变量,默认值是字符串abc! -->

5、命名空间_宏指令

当运行 FTL 模板时,就会有使用 assign 和 macro 指令建立的变量的集合(多是空的),能够从前一章节来看如何使用它们。像这样的变量集合被称为 namespace 命名空间。在简单的状况下能够只使用一个命名空间,称之为 main namespace 主命名空间。由于一般只使用本页上的命名空间,因此就没有意识到这点。 

    若是想建立能够重复使用的宏,函数和其余变量的集合,一般用术语来讲就是引用

library 库。使用多个命名空间是必然的。只要考虑你在一些项目中,或者想和他人共享使用的时候,你是否有一个很大的宏的集合。但要确保库中没有宏(或其余变量)名和数据模型中变量同名,并且也不能和模板中引用其余库中的变量同名。一般来讲,变量由于名称冲突也会相互冲突。因此要为每一个库中的变量使用不一样的命名空间。

定义b.ftl文件:

<#macro copyright date>

  <p>Copyright (C) ${date} 中国人民.</p> 

</#macro> 

<#assign mail = "zgrm@163.com">

在a.ftl文件中引入b.ftl,从而可使用b.ftl中定义的宏和变量:

测试命名空间:

<#import "b.ftl" as bb  />

<@bb.copyright date="2010-2011" />

${bb.mail}

<#assign mail="my@163.com"  />

${mail}

<#assign mail="my@163.com" in bb  />

${bb.mail}

执行后,控制台打印:

测试命名空间:

  <p>Copyright (C) 2010-2011 中国人民.</p> 

zgrm@163.com

my@163.com

my@163.com

6、字符串操做

1. 字符串链接
字符串链接有两种语法:
1 使用${..}#{..}在字符串常量内插入表达式的值;
(2) 
直接使用链接运算符“+”链接字符串。
如,下面两种写法等效:
              ${"Hello, ${user}"}                                                                                                               
              ${"Hello, " + user + "!"}                                                                                                        
有一点须要注意: ${..}只能用于文本部分做为插值输出,而不能用于比较等其余用途,如:
              <#if ${isBig}>Wow!</#if>                                                                                                               
              <#if "${isBig}">Wow!</#if>                                                                                                             
应该写成:
              <#if isBig>Wow!</#if>                                                                                                                    

2.
截取子串
截取子串能够根据字符串的索引来进行,若是指定一个索引值,则取得字符串该索引处的字符;若是指定两个索引值,则截取两个索引中间的字符串子串。如:
              <#assign number="01234">
              ${number[0]} <#--
输出字符0 -->
              ${number[0..3]} <#--
输出子串“0123” -->

7、内置函数

FreeMarker提供了一些内建函数来转换输出,能够在任何变量后紧跟?。?后紧跟内建函数,就能够经过内建函数来转换输出变量。

字符串相关经常使用的内建函数:

1. html: 对字符串进行HTML编码;

2. cap_first: 使字符串第一个字母大写;

3. lower_case: 将字符串转成小写;

4. upper_case: 将字符串转成大写;

集合相关经常使用的内建函数:

1. size: 得到集合中元素的个数;

数字值相关经常使用的内建函数:

1. int: 取得数字的整数部分。

举例:

root.put("htm2", "<b>粗体</b>");

内建函数:

${htm2?html}

输出:<b>粗体</b>

相关文章
相关标签/搜索