@xiaoqq
2016-07-07T09:38:33.000000Z
字数 2293
阅读 1306
FreeMarker
前端开发
${和}
所分隔,仅仅可以在文本中间使用users + ["guest"]
[firstindex..lastindex]
可以获取序列中的一部分。lastindex
可以被省略,那么这样将会读取到序列的末尾。+
号的方式来连接哈希表。如果两个哈希表含有键相同的项,那么在+
号右侧的哈希表中的项目优先。html
: 字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<
代替<
;)。cap_first
:字符串的第一个字母变为大写形式lower_case
:字符串的小写形式upper_case
:字符串的大写形式trim
:去掉字符串首尾的空格size
:序列中元素的个数(序列中才能使用)int
:数字的整数部分(比如-1.9?int就是-1)(数字才能使用)默认值:不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名后面跟着一个!和默认值。 使用形式概览:unsafe_expr ! default_expr
<h1>Welcome ${user!"Anonymous"}!</h1>
处理不存在的值:在变量名后面通过放置??来询问FreeMarker一个变量是否存在。使用形式概览:unsafe_expr??
或 (unsafe_expr)??
<#if user??><h1>Welcome ${user}!</h1></#if>
使用#macro
定义指令,使用@
来代替#
调用指令。用户自定义指令(换句话说,就是FreeMarker的标签)这种类型的值也是一种子程序,一种可以复用的模板代码段。
按经验来说,如果能够实现,请先用自定义指令而不要用函数/方法。输出(返回值)的是标记(HTML,XML等)情况下使用自定义指令
自定义指令参数:在macro指令中,宏名称的后面位置是用来定义变量的
<#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
可以调用如下:
<@greet person="Fred"/> and <@greet person="Batman"/>
<#if ...>nested content</#if>
。
<#macro border>
<table border=4 cellspacing=0 cellpadding=4><tr><td>
<#nested>
</td></tr></table>
</#macro>
<#nested>指令执行位于开始和结束标记指令之间的模板代码段。写法如下所示:
<@border>The bordered text</@border>
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#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!
变量类型:
- 简单变量: 它能从模板中的任何位置来访问。可以使用
assign
或macro
指令来创建或替换这些变量。- 局部变量: 可以使用
local
指令在宏定义体内创建或替换局部变量。- 循环变量: 循环变量是由指令(如
list
)自动创建的,而且它们只在指令的开始和结束标记内有效
<#assign x = 1> <#-- 创建变量 x -->
${x}
<#assign x = x + 3> <#-- 替换变量 x -->
${x}
globals
main namespace
主命名空间。当引用了一个模板之后,需要调用模板的命名空间,则需通过import的调用者(本例中的主命名空间)创建一个新的哈希表变量。
<#import "/lib/my_test.ftl" as my>
<#-- 被称为"my"的哈希表就会是那个"大门" -->
<@my.copyright date="1999-2002"/>
${my.mail}