可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间
l 可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子:
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="jsmith@other.com" in my>
${my.mail}
l 输出结果:
jsmith@acme.com
jsmith@other.com
l 数据模型中的变量任何地方都可见,也包括不同的名字空间,下面是修改的库:
<#macro copyright date>
Copyright (C) ${date} ${user}. All rights reserved.
#macro>
<#assign mail = "${user}@acme.com">
l 假设数据模型中的user变量的值是Fred,则下面的代码:
<#import "/lib/my_test.ftl" as my>
<@my.copyright date="1999-2002"/>
${my.mail}
l 输出结果:
Copyright (C) 1999-2002 Fred. All rights reserved.
Fred@acme.com
Freemarker - 几个比较实用的例子 - -
用Freemarker做模本语言有一段时间了,列出几个和JSP或者Velocity相比起来比较方便的用途,目的是引诱更多的人跳上Freemarker这个贼船,
1. String内置的
JavaScript转换: js_string
模板:
<script>
alert("${errorMessage js_string}");
输出:
<script>
alert("Readonly\'s pet name is \"Cross Bone\"");
2.内置的默认值处理:default
用途: 用于处理默认值
模本:
User: ${userLogin.name default("Anonymous")}
${(employee.department.manager.name) default(" ")} |
输出:
User: Anonymous
|
注,可以对整个对象树加上(),再用内置处理器这种方便的做法,偶也是最近刚学会的,以前一直用很傻的方法做.....
3. Sequence内置的计数器: xxx_index
用途:显示序号
模板:
<#list employees as e>
${e_index}. ${e.name}
#list>
输出:
1. Readonly
2. Robbin
4. Sequence内置的分段器: chunk
用途:某些比较BT的排版需求
模板:
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
<#list seq chunk(4) as row>
<#list row as cell>${cell} #list>
#list>
<#list seq chunk(4, '-') as row>
www.2cto.com
<#list row as cell>${cell} #list> |
#list>
输出:
a
b
c
d
e
f
g
h
i
j