FreeMarker教程(四)

2014-11-24 12:02:18 · 作者: · 浏览: 140
可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间
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.

<#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
用途:用于 java script转义,转换',",换行等特殊字符
模板:
<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}
输出:
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 seq chunk(4, '-') as row>
    www.2cto.com
    <#list row as cell>${cell}
    输出:
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • a
    b
    c
    d
    e
    f
    g
    h
    i
    j
    -
    -