FreeMarker常用标签介绍

FreeMarker标签使用

一、FreeMarker模板文件主要有4个部分组成

1、文本,直接输出的部分

2、注释,即<#--...-->格式不会输出

3、插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出

4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。

FTL指令规则

FreeMarker有三种FTL标签,这和HTML的标签是完全类似的

开始标签:<#directivename parameters>

结束标签:</#directivename>

空标签: <#directivename parameters />

实际上,使用标签时前面的#符号也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改为@符号

插值规则

FreeMarker的插值有如下两种类型

1、通用插值:${expr}

2、数字格式化插值:#{expr}或者#{expr;format}

通用插值,有可以分为四种情况

a、插值结果为字符串值:直接输出表达式结果

b、插值结果为数字值:根据默认格式(#setting 指令设置)将表达式结果转换成文本输出。可以使用内建的字符串函数格式单个插值,例如

<#setting number_format = "currency" />

<#assign price = 42 />

${price}

${price?string}

${price?string.number}

${price?string.currency}

${price?string.percent}

c、输出值为日期值:根据默认格式(由 #setting 指令设置)将表达式结果转换成文本输出,可以使用内建的字符串函数格式化单个插值,例如

<#assign lastUpdated = "2009-01-07 15:05"?datetime("yyyy-MM-dd HH:mm") />

${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")};

${lastUpdated?string("EEE,MMM d,yy")};

${lastUpdated?string("EEEE,MMMM dd,yyyy,hh:mm:ss a ‘(‘zzz‘)‘")};

${lastUpdated?string.short};

${lastUpdated?string.long};

${lastUpdated?String.full};

d、插值结果为布尔值

<#assign foo=true />

${foo?string("是foo","非foo")}

数字格式化插值

数字格式化插值可采用#{expr;format}的形式来格式化数字,其中format可以是:

mX:小数部分最小X位

MX:小数部分最大X位

例如:

<#assign x = 2.582 />

<#assign y =4 />

#{x;M2};

#{y;M2};

#{x;m1};

#{y;m1};

#{x;m1M2};

#{y:m1M2};

二、表达式

表达式是FreeMarker的核心功能。表达式放置在插值语法(${...})之中时,表面需要输出表达式的值,表达式语法也可以与FreeMarker标签结合,用于控制输出

1、直接指定值

例如:

a、字符串

${‘我的名字是\"yeek\"‘};

${"我的文件保存在d:\\盘"};

b、数值

c、布尔值

d、日期型

FreeMarker支持date、time、datetime三种类型,这三种类型的值无法直接指定,通常需要借助字符串的date、time、datetime三个内建函数进行转换才可以

<#assign test1 = "2009-01-22"?date("yyyy-MM-dd") />;

<#assign test2 ="16:34:43"?time("HH:mm:ss") />

<#assign test2 = "2009-01-22 17:23:45"?datetime("yyyy-MM-dd HH:mm:ss") />

${test1?string.full}

e、集合

集合以方括号包括,各集合元素之间以英文逗号(,)分隔,看如下的示例:

<#list["星期一",,["星期二",["星期三",["星期四",["星期五"] as x>

${s};

</#list>

f、Map集合

Map对象使用花括号包括,Map中的key-value对之间以英文冒号(:)隔开,多组key-value对之间以英文逗号(,) 隔开

例如

<#assign score = {"语文":78,"数学":83,"Java":89} >

<#list score?key as x>

${x}--->${score[x]};

</#list>

2、输出变量值

FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性

a、顶层变量

Map root = new HashMap();

root.put("name","wenchao");

对应顶层变量,直接使用${variableName}来输出变量值,变量名只能是数字、字母、下划线、$、@和#的组合,并不能以数字开头

b、输出集合元素

如果需要输出集合元素,则可以根据集合元素的索引来输出元素。集合元素的索引以方括号指定。

假设有集合对象为:["星期一","星期二","星期三","星期四","星期五","星期六"],该集合对象名为week, 如果需要输出星期三,则可以使用如下语法:

${week[2]}

集合里的第一个元素的索引是0

c、输出Map元素

这里的Map对象可以是直接HashMap的实例,甚至包括 JavaBean实例,对应JavaBean实例,我们一样可以把其当成属性为key,属性为value的Map实例

3、字符串操作

a、字符串链接

字符串连接有两种语法

A、使用${..}(或#{..})在字符串常量部分插入表达式的值,从而完成字符串连接

B、直接使用连接运算符(+)来连接字符串

使用第一种语法来连接字符串

${"Hello,${user}!"}

第二种使用连接符号来连接字符串

${"Hello,"+user+"!"};

值的注意的是,${..}只能用于文本部分,因此,下面的代码是错误的:

<#if ${isBig}>Wow!</#if>

<#if "${isBig}">Wow!</#if>

应该写成:

<#if isBig>Wow!</#if>

b、截取字符串

Map root = new HashMap();

root.put("book","疯狂Ajax讲义");

${book[0]}

${book[4]}

${book[1..4]}

4、集合连接运算符

这里所说的集合连接运算时将两个集合连接成一个新的集合,连接集合的运算符是+,例如

<#list ["星期一"," 星期二","星期三"]+["星期四","星期五"] as x>

${x}

</#list>

5、Map连接运算符

Map对象的连接运算也是将两个Map对象连接成一个新的Map对象,Map对象的连接运算符是+。如果两个Map对象具有相同的 key,则后加入Map里的key所

对应的value替代原来key所对应的value

6、算术运算符

FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括: +,-,*,/,%

看如下代码示范

<#assign x = 5 />

${x* -100}

${x/2}

${12%10}

在表达式中使用算术运算时要注意以下几点。

A、运算符两边的运算数必须是数字,因此下面的代码是错误的:

${3*"5"}

B、使用+(既可以作为加号,也可以作为字符串连接运算符)运算时,如果一边是数字,一边是字符串,就会自动将数字转化为字符串。例如

${3+"5"}

输出结果:35

C、使用内建的int函数可对数值取整。例如

<#assign x = 5>

${(x/2)?int}

${1.1?int}

${1.999?int}

${-1.9999?int}

${-1.1?int}

7、比较运算符

表达式中支持的比较运算符有如下几个

a、=(或者==):判断两个值是否相等.

b、!=:判断两个值是否不相等

c、 >(或者gt):判断坐标值是否大于右边值

d、 >=(或者gte):判断坐标值是否大于等于右边值

e、 <(或者lt):判断左边值是否小于右边值

f、 <=(或者lte):判断左边值是否小于等于右边值

8、逻辑运算符

逻辑运算符有如下几个

a、逻辑与:&&

b、逻辑或:||

c、逻辑非:!

逻辑运算符只能作用于布尔值,否则将产生错误。

9、内建函数

FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可通过内建函数来转换输出变量

下面是常用的内建的字符串函数

a、html:对字符串进行HTML编码

b、cap_first:将字符串第一个字母成大写

c、lower_case:将字符串转换成小写

d、upper_case:将字符串转换成大写

e、trim: 去掉字符串前后的空白字符

下面是集合的常用的内建函数

a、size: 获得序列中元素的数目

下面是数字值的常用的内建函数

a、int 取得数字的整数部分

例如

<#assign test="Tom & Jerry" />

${test?html}

${test?upper_case?html}

10、空值处理运算符

FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常。

11、运算符优先级

三、FreeMarker 的常用指令

1、if指令

分支控制语句

语法格式如下

<#if condition>

....

<#elseif condition2>

...

<#elseif condition3>

...

<#else>

...

</#if>

2、switch、case、default、break指令

<#switch value>

<#case refValue>

...

<#bread>

<#case refValue>

...

<#bread>

<#default>

...

</#switch>

虽然FreeMarker提供了switch指令,但它并不推荐使用switch指令来控制也输出,而是推荐使用FreeMarker的if..elseif..else 指令来替代它。

3、list、break指令

list指令时一个典型的迭代输出指令,用于迭代输出数据模型中的集合。list指令的语法格式如下:

<#list sequence as item>

...

</#list>

除此之外,迭代集合对象时,还包括两个特殊的循环变量:

a、item_index:当前变量的索引值。

b、item_has_next:是否存在下一个对象

也可以使用<#break>指令跳出迭代

<#list ["星期一","星期二","星期三","星期四","星期五"] as x>

${x_index +1}.${x} <#if x_has_next>,</#if>

<#if x = "星期四"><#break></#if>

</#list>

4、include 指令

include指令的作用类似于JSP的包含指令,用于包含指定页,include指令的语法格式如下

<#include filename [options]

在上面的语法格式中,两个参数的解释如下

a、filename:该参数指定被包含的模板文件

b、options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,encoding指定包含页面时所使用的解码集,而parse指定被

包含是否作为FTL文件来解析。如果省略了parse选项值,则该选项值默认是true

5、 import指令

该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import 指令的语法格式如下

<#import path as mapObject>

在上面的语法格式中,path指定要被导入的模板文件,而mapObject是一个Map对象名,通过这行代码,将导致path模板中的所有变量都被放置

在mapObject中

<#import "/lib/common.ftl" as com>

6、noparse指令

noparse指令指定FreeMarker不处理该指令里包含的内容,该指令的语法格式如下:

<#noparse>

...

</#noparse>

7、escape、noescape指令

8、assign指令

它用于为该模板页面创建或替换一个顶层变量

9、setting指令

该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:

<#setting name = value>

name 的取值范围包括如下几个

locale :该选项指定该模板所用的国家/语言选项

number_format:该选项指定格式化输出数字的格式

boolean_format:该选项指定两个布尔值的语法格式,默认值是"true、false"

date_format,time_format,datetime_format:该选项指定格式化输出日期的格式

time_zone:  设置格式化输出日期时所使用的时区

10、macro、nested、return指令

参考资料:http://www.blogjava.net/kxbin/articles/366505.html

时间: 2024-10-02 08:25:15

FreeMarker常用标签介绍的相关文章

html常用标签介绍

常用标签介绍 文本 最常用的标签可能是<font>了,它用于改变字体,字号,文字颜色. 点击查看效果 <font size="6">6</font><font size="4">4</font><font color="red" size="5">红色的5</font><font face="黑体">黑体的字&l

前端基础-HTML常用标签介绍

前端基础-HTML常用标签介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML是什么 1>.超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则: 2>.浏览器按顺序渲染网页文件,然后根据标记符解释和显示内容.但需要注意的是,对于不同的浏览器,对同一标签可能会有不完全相同的解释(兼容性): 3>.静态网页文件扩展名:".html "或 &qu

freemarker常用标签解释遍历

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>学生信息</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="

49、html基础认识&amp;常用标签(1)

从今天期我们进入前端的学习,先学习html,没有任何复杂难懂的逻辑需要烧脑,只需要记忆.练习.练习.练习. 一.HTML初识 1.web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8081)) sock.listen(5) while True: print("server is working.....")

对HTML的理解及常用标签使用介绍--来自我的百度前端技术学院的笔记

HTML是什么,HTML5是什么? --HTML:超文本标记语言,一种用于创建网页的标准标记语言: --HTML5:目前最新的HTML标准,包含新的元素.属性.行为,基于它们的功能特征将他们分成不同的组别: * 语义:能够让你更恰当地描述你的内容是什么: * 连通性:能够让你和服务器之间通过创新的技术方法进行通信: * 离线&存储:能够让网页在客户端本地存储数据更高效地离线运行: * 多媒体:使用video和audio成为了所有web中的一等公民: * 2D/3D绘图&效果:提供了一个更加

struts2常用标签

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的jsp页面,也可以说Veloc

Struts2常用标签总结

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的jsp页面,也可以说Veloc

Struts2常用标签(转载)--【SSH】

出处:Struts2常用标签总结 Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常

struts2 标签介绍

计应134班(实验班) 陈兴 Struts2常用标签总结一 介绍1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的js