1、global全局赋值语法
<#global name=value>
<#global name1=value1 name2=value2 ... nameN=valueN>
<#global name>
capture this
</#global>
<!-- 利用这个语法给变量赋值,那么这个变量在所有的namespace中是可见的,
如果这个变量被当前的assign语法覆盖如<#global x=2><#assign x=1>在当前页面里x=2将被隐藏,
或者通过${.globals.x} 来访问 -->
2、setting 语法
// 用来设置整个系统的一个环境
locale // zh_CN 中文环境
number_format
boolean_format
date_format , time_format , datetime_format
time_zone
classic_compatible
// 例1:
<#setting number_format="percent"/> // 设置数字默认输出方式('percent',百分比)
// 例2:
// 假如当前是匈牙利的设置,然后修改成美国
${1.2} // 输出1,2
<#setting locale="en_US">
${1.2} // 输出1.2,因为匈牙利是采用", "作为十进制的分隔符,美国是用". "
3、macro宏指令
例子1:
<#-- 定义宏 -->
<#macro test foo bar="Bar" baaz=-1>
Text: ${foo}, ${bar}, ${baaz}
</#macro>
<#-- 使用宏 -->
<@test foo="a" bar="b" baaz=5*5/> // 输出:Text: a, b, 25
<@test foo="a" bar="b"/> // 输出:Text: a, b, -1
<@test foo="a" baaz=5*5-2/> // 输出:Text: a, Bar, 23
<@test foo="a"/> // 输出:Text: a, Bar, -1
例子2:
<#-- 定义一个循环输出的宏 -->
<#macro list title items>
${title}
<#list items as x>
*${x}
</#list>
</#macro>
<#-- 使用宏 -->
<@list items=["mouse", "elephant", "python"] title="Animals"/>
// 输出Animals *mouse *elephant *python
例子3:
<#-- 嵌套宏 -->
<#macro border>
<table>
<#nested>
</table>
</#macro>
<#-- 嵌套宏使用 -->
<@border>
<tr><td>hahaha</td></tr>
</@border>
输出结果:
<table>
<tr><td>hahaha</td></tr>
</table>
例子4:在nested指令中使用循环变量时,可以使用多个循环变量,看如下代码:
<#-- 循环嵌套宏 -->
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count> // 使用nested指令时指定了三个循环变量
</#list>
</#macro>
<#-- 使用宏 -->
<@repeat count = 4; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
// 输出结果:
// 1. 0.5
// 2. 1
// 3. 1.5
// 4. 2 Last!
freemarker 宏嵌套nested 的使用:
http://blog.sina.com.cn/s/blog_7e5699790100z59g.html
4、结束macro指令
// return指令用于结束macro指令
<#-- 创建宏 -->
<#macro book>
spring
<#return>
j2ee
</#macro>
<#-- 使用宏 -->
<@book />
// 上面的代码输出:spring,而j2ee位于return指令之后,不会输出.
FreeMarker 工具类:
http://files.cnblogs.com/files/duke-cui/FreeMarkerUtil.rar
测试 Project: