FreeMarker标签使用

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

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

2、注释,即格式不会输出

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

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

FTL指令规则

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

开始标签:

结束标签:#directivename>

空标签:

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

插值规则

FreeMarker的插值有如下两种类型

1、通用插值:${expr}

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

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

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

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

${price}

${price?string}

${price?string.number}

${price?string.currency}

${price?string.percent}

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

${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、插值结果为布尔值

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

数字格式化插值

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

mX:小数部分最小X位

MX:小数部分最大X位

例如:

#{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三个内建函数进行转换才可以

;

${test1?string.full}

e、集合

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

${s};

#list>

f、Map集合

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

例如

${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+"!"};

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

Wow!#if>

Wow!#if>

应该写成:

Wow!#if>

b、截取字符串

Map root = new HashMap();

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

${book[0]}

${book[4]}

${book[1..4]}

4、集合连接运算符

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

${x}

#list>

5、Map连接运算符

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

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

6、算术运算符

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

看如下代码示范

${x* -100}

${x/2}

${12%10}

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

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

${3*"5"}

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

${3+"5"}

输出结果:35

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

${(x/2)?int}

${1.1?int}

${1.999?int}

${-1.9999?int}

${-1.1?int}

7、比较运算符

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

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

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

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

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

e、

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 取得数字的整数部分

例如

${test?html}

${test?upper_case?html}

10、空值处理运算符

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

11、运算符优先级

三、FreeMarker 的常用指令

1、if指令

分支控制语句

语法格式如下

....

...

...

...

#if>

2、switch、case、default、break指令

...

...

...

#switch>

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

3、list、break指令

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

...

#list>

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

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

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

也可以使用指令跳出迭代

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

#if>

#list>

4、include 指令

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

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

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

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

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

5、 import指令

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

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

在mapObject中

6、noparse指令

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

...

#noparse>

7、escape、noescape指令

8、assign指令

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

9、setting指令

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

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

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

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

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

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

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

10、macro、nested、return指令

freemarker 解析对象的某元素_FreeMarker标签介绍及各种数据类型处理相关推荐

  1. freemarker 解析对象的某元素_Freemarker常用技巧(三)

    freemarker模板解析过程 例如:一个freemarker表达式 ${hello} ,会被解析成三个部分,分别是 ${hello} 前面和后面的body标签,在freemarker中被定义为Te ...

  2. selenium提取数据之driver对象定位标签元素获取标签对象的方法

    selenium提取数据之driver对象定位标签元素获取标签对象的方法 在selenium中可以通过多种方式来定位标签,返回标签元素对象 find_element_by_id (返回一个元素) fi ...

  3. day04【JS高级】BOM对象、Window对象、二种定时器、 Location对象、DOM对象、DOM获取元素、DOM操作内容、DOM操作属性、DOM操作样式、DOM操作元素(标签)、 正则表达式

    回顾 1. js基础语法运算符:算数运算符可以与字符串进行数学运算,js底层进行隐式转换比较运算符:===(恒等) 特点,比较类型+内容流程控制语句if判断条件表达式:1)布尔2)数值:非0为真3)字 ...

  4. freemarker解析html标签,【转】Freemarker输出$和html标签等特殊符号

    原文:http://blog.csdn.net/achilles12345/article/details/41820507 场景:程序员都不喜欢看文档,而更喜欢抄例子.所以,我们把平台组的组件都做成 ...

  5. html 指定对象为块元素,html内联(行内)元素、块级(块状)元素和行内块元素分类...

    HTML可以将元素分类方式分为内联(行内)元素.块级(块状)元素和行内块元素三种. 注:HTML是标签语言,那么既然是标签,就可以自己定义一些自己元素(如自定义的元素等),自定义元素浏览器默认解析为内 ...

  6. JavaScript文档对象模型document对象改变Html元素内容(3)

    1.document对象改变Html元素内容 (1.)innerText不会自动解析html标签,会将代码前后的空格和换行去掉 innerHTMl会自动解析html标签,保留代码前后的空格和换行 (推 ...

  7. myeclipse html选取包含元素的标签_HTML基础2019-1-21

    1.1 HTML简介 1.1.2 什么是HTML? HTML 是用来描述网页的一种语言. l HTML 指的是超文本标记语言: Hyper Text Markup Language l HTML 不是 ...

  8. 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响

    原文地址 背景 开发过程中遇到问题,简单写个demo 运行环境为Chrome 68 描述一下这个问题,当a标签内部存在嵌套时, 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存 ...

  9. [html] html元素哪些标签是不可替换元素?哪些是可替换元素?

    [html] html元素哪些标签是不可替换元素?哪些是可替换元素? 可替换元素(replaced element)的展现效果不是由 CSS 来控制的.这些元素是一种外部对象,它们外观的渲染,是独立于 ...

最新文章

  1. 【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )
  2. The Annotated Transformer
  3. DataView.RowFilter的使用(包括in,like等SQL中的操作符)
  4. .NET基础 (08)字符串处理
  5. Vue.js(学习Vue3之前必须要掌握的知识)
  6. STP实验(指定特定交换机为根桥)
  7. 将一个JDBC的ResultSet转成XML并输出到文件
  8. [推荐] 6410 休眠唤醒实现小结 [问题点数:40分]【转】
  9. python中运行代码时没有报错但是也没有输出而且还有exit code 0的结束标志
  10. 合并算法详解原理和代码
  11. 网络连接 断断续续 出现黄色感叹号! 网速缓慢
  12. 陈绮贞 旅行的意义 Ukulele 尤克里里谱
  13. Yapi 接口平台(Windows、Linux 在线离线安装部署)
  14. 前端html 不规则表格制作
  15. mac安静执行脚本_让Mac OS X系统启动时执行脚本的方法
  16. Python刷投票自动化【刷微信投票】脚本开发,源代码分析
  17. 谁能帮我解密一下这个鼠标宏
  18. 开机显示器没显示,电源风扇显卡风扇都在转,键盘不亮
  19. blender制作开门动画
  20. 编译原理(十六)——中间代码优化(1)

热门文章

  1. A - 娜娜梦游仙境系列——诡异的钢琴
  2. golang mongodb驱动mgo异常崩溃问题
  3. ATF:Gicv源码文件系列-gicv2.mk
  4. 根据身份证号判断性别、年龄、生日
  5. 【水滴石穿】ES must与should组合使用的正确方式
  6. 网络安全岗位介绍——等级保护测评师
  7. AI生死劫,什么样的公司将被洪流吞噬?
  8. 利用正则截取匹配的字符串前后内容同
  9. 实例003输出名言 实例说明 是否能够成为真正的编程高手,主要是在于是否有毅力坚持学习和练习。本实例要求输出名言“贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒。”主要是想让读者激励自己,坚持学习
  10. Bigwig 可视化用 tackPlotR 试试看?