@xiaoqq
2016-07-07T09:38:33.000000Z
字数 2293
阅读 1386
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.52. 13. 1.54. 2 Last!
变量类型:
- 简单变量: 它能从模板中的任何位置来访问。可以使用
assign或macro指令来创建或替换这些变量。- 局部变量: 可以使用
local指令在宏定义体内创建或替换局部变量。- 循环变量: 循环变量是由指令(如
list)自动创建的,而且它们只在指令的开始和结束标记内有效
<#assign x = 1> <#-- 创建变量 x -->${x}<#assign x = x + 3> <#-- 替换变量 x -->${x}
globalsmain namespace主命名空间。当引用了一个模板之后,需要调用模板的命名空间,则需通过import的调用者(本例中的主命名空间)创建一个新的哈希表变量。
<#import "/lib/my_test.ftl" as my><#-- 被称为"my"的哈希表就会是那个"大门" --><@my.copyright date="1999-2002"/>${my.mail}