freemarker(3)

2019-08-29 19:55

The average of 6 and 10 and 20 is: ${avg(6, 10, 20)}

The average of the price of python and elephant is: ${avg(animals.python.price, animals.elephant.price)}

(5)宏和变换器

? 宏和变换器变量是用户自定义指令(自定义FTL标记),会在后面讲述这

些高级特性 (6)节点

? 节点变量表示为树型结构中的一个节点,通常在XML处理中使用,会在后

面的专门章节中讲述

3、模板

(1)整体结构

? 模板使用FTL(FreeMarker模板语言)编写,是下面各部分的一个组合:

? 文本:直接输出

? Interpolation:由${和},或#{和}来限定,计算值替代输出

? FTL标记:FreeMarker指令,和HTML标记类似,名字前加#予以区分,

不会输出

? 注释:由<#--和-->限定,不会输出 ? 下面是以一个具体模板例子:

[BR] [BR]

Welcome![BR] [BR] [BR]

<#-- Greet the user with his/her name -->[BR]

Welcome ${user}!

[BR]

We have these animals:[BR] [BR]

<#list animals as being>[BR]

${being.name} for ${being.price} Euros[BR] [BR] [BR] [BR]

? [BR]是用于换行的特殊字符序列 ? 注意事项:

? FTL区分大小写,所以list是正确的FTL指令,而List不是;${name}

和${NAME}是不同的

? Interpolation只能在文本中使用

? FTL标记不能位于另一个FTL标记内部,例如:

<#if <#include 'foo'>='bar'>...

? 注释可以位于FTL标记和Interpolation内部,如下面的例子:

Welcome ${user <#-- The name of user -->}!

[BR]

We have these animals:[BR] [BR]

<#list <#-- some comment... --> animals as <#-- again... --> being>[BR] ...

? 多余的空白字符会在模板输出时移除 (2)指令

? 在FreeMarker中,使用FTL标记引用指令 ? 有三种FTL标记,这和HTML标记是类似的:

? 开始标记:<#directivename parameters> ? 结束标记:

? 空内容指令标记:<#directivename parameters/> ? 有两种类型的指令:预定义指令和用户定义指令

? 用户定义指令要使用@替换#,如<@mydirective>...(会

在后面讲述)

? FTL标记不能够交叉,而应该正确的嵌套,如下面的代码是错误的:

<#list animals as being>

${being.name} for ${being.price} Euros <#if use = \ (except for you)

<#-- WRONG! -->

? 如果使用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错

误消息

? FreeMarker会忽略FTL标记中的空白字符,如下面的例子:

<#list[BR]

animals as[BR] being[BR]

>[BR]

${being.name} for ${being.price} Euros[BR]

? 但是,<、

? 字符串

? 使用单引号或双引号限定

? 如果包含特殊字符需要转义,如下面的例子:

${\\\\quoted\\\ and this is a backslash: \\\\\

${'It\\'s \ this is a backslash: \\\\'}

输出结果是:

It's \quoted\ and this is a backslash: \\

It's \ this is a backslash: \\

? 下面是支持的转义序列: 转义序列 含义 \\\ \\' \\\\ \\n \\r \\t \\b \\f \\l \\g \\a 双引号(u0022) 单引号(u0027) 反斜杠(u005C) 换行(u000A) Return (u000D) Tab (u0009) Backspace (u0008) Form feed (u000C) < > & 转义序列 含义 \\{ \\xCode { 4位16进制Unicode代码 ? 有一类特殊的字符串称为raw字符串,被认为是纯文本,其中的\\

和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子:

${r\ ${r\

输出的结果是:

${foo} C:\\foo\\bar

? 数字

? 直接输入,不需要引号

? 精度数字使用“.”分隔,不能使用分组符号

? 目前版本不支持科学计数法,所以“1E3”是错误的 ? 不能省略小数点前面的0,所以“.5”是错误的 ? 数字8、+8、08和8.00都是相同的 ? 布尔值

? true和false,不使用引号 ? 序列

? 由逗号分隔的子变量列表,由方括号限定,下面是一个例子:

<#list [\ as x> ${x}

输出的结果是:

winter spring summer autumn

? 列表的项目是表达式,所以可以有下面的例子:

[2 + 2, [1, 2, 3, 4], \

? 可以使用数字范围定义数字序列,例如2..5等同于[2, 3, 4, 5],

但是更有效率,注意数字范围没有方括号 ? 可以定义反递增的数字范围,如5..2 ? 散列(hash)

? 由逗号分隔的键/值列表,由大括号限定,键和值之间用冒号分隔,

下面是一个例子:

{\

? 键和值都是表达式,但是键必须是字符串

? 获取变量

? 顶层变量: ${variable},变量名只能是字母、数字、下划线、$、@

和#的组合,且不能以数字开头 ? 从散列中获取数据

? 可以使用点语法或方括号语法,假设有下面的数据模型:

(root) | +- book | |

| +- title = \ | | | +- author | |

| +- name = \ | |

| +- info = \ |

+- test = \

下面都是等价的:

book.author.name book[\ book.author.[\ book[\

? 使用点语法,变量名字有顶层变量一样的限制,但方括号语法没有

该限制,因为名字是任意表达式的结果

? 从序列获得数据:和散列的方括号语法语法一样,只是方括号中的表达

式值必须是数字;注意:第一个项目的索引是0 ? 序列片断:使用[startIndex..endIndex]语法,从序列中获得序列片断

(也是序列);startIndex和endIndex是结果为数字的表达式 ? 特殊变量:FreeMarker内定义变量,使用.variablename语法访问 ? 字符串操作

? Interpolation(或连接操作)

? 可以使用${..}(或#{..})在文本部分插入表达式的值,例如:

${\


freemarker(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:全国计算机一级考试复习资料 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: