`
精神分裂
  • 浏览: 28459 次
  • 性别: Icon_minigender_1
  • 来自: 二次元世界
社区版块
存档分类
最新评论

FreeMarker表达式

阅读更多
表达式是FreeMarker模板的核心功能,表达式放置在插值语法(${……})之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker标签结合,用于控制输出。

直接指定值
使用直接指定值的语法让FreeMarker直接输出插值中的值,而不是输出变量值。直接指定值可以是字符串、数值、布尔值、集合和MAP对象。
如果字符串中包含特殊字符,需要转义。
${"文件保存在c:\\盘"} --输出为-- 文件保存在c:\盘
${'名字是\"Hoffman\"'} --输出为-- 名字是"Hoffman

注意:Map对象的key和value都是表达式,但是key必须是字符串
{"语文":85, "数学":83, "程序":99}
Map对象的连接运算是将两个Map对象连接成一个新的Map对象,Map对象连接运算符是+。如果两个Map对象具有相同的key,则右边的值代替左边的值。
<#assign scores ={"语文":90, "数学":80}
+ {"数学":85, "英文":88}>
${scores.语文} --输出为-- 90
${scores.数学} --输出为-- 85
${scores.英文} --输出为-- 88

列表的项目是表达式,所以可以有下面的例子:
[2 + 2, [1, 2, 3, 4], "whatnot"]
可以使用数字范围定义数字序列,例如2..5等同于[2, 3, 4, 5],但是更有效率,注意数字范围没有方括号
可以定义反递增的数字范围,如5..2
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] as x>
${x} &nbsp;
</#list>
输出结果为:星期一 星期二 星期三 星期四 星期五 星期六 星期日
集合连接运算符
将两个集合连接成一个新的集合,连接集合的运算符是+。
<#list ["星期一", "星期二", "星期三", "星期四"] + ["星期五", "星期六", "星期日"] as x>
${x} &nbsp;
</#list>
输出结果为:星期一 星期二 星期三 星期四 星期五 星期六 星期日

输出变量值
FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性。
顶层变量
直接放在数据模型中的值
对于顶层变量,直接用${variable}来输出变量值,变量名只能是字母、数字、下划线、$、@和#的组合,且不能以数字开头。
//创建数据模型
Map root = new HashMap();
//name是一个顶层对象
root.put("name", "Hoffman");
输出结以上值,使用:${name}
集合元素
可根据集合元素的索引来输出集合元素。集合元素的索引以方括号指定。
注意:集合里第一个元素的索引是0。
假设有索引["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
输出第三个集合元素,使用:${week[2]}
Map元素
Map对象可以是HashMap,也可以是JavaBean(对于JavaBean可以把其属性当作key,把属性值当作value)
使用点语法,变量名字有顶层变量一样的限制,但方括号语法没有该限制,因为名字是任意表达式的结果。

字符串操作
字符串连接
两种方法:
1. 使用${..}(或#{..})在字符串常量部分插入表达式的值,从而完成字符串连接。
2. 直接使用连接运算符(+)来连接字符串
Map root = new HashMap();
root.put("user", "Hoffman");
将user变量的值和常量连接起来,有两种语法:
${"Hello ${user}!"}或
${"${user}${user}${user}${user}"}
${"Hello " + user + "!"}或
${user + user + user + user}
${..}只能用于文本部分,下面的代码是错误的:
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if>
应该写成:
<#if isBig>Wow!</#if>

截取子串
Map root = new HashMap();
root.put("user", "Hoffman");
截取通过如下语法:
${user[0]}${user[4]}
${user[1..4]}
返回结果为:
Hm
offm

算术运算符
FreeMarker支持的算术运算符包括:+、-、*、/、%。
操作符两边必须是数字,因此下面的代码是错误的:
${3 * "5"} <#-- WRONG! -->
使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如:
${3 + "5"}  输出结果是:35

比较运算符
=(或者==):两个值是否相等
!=:两个值是否不相等
=和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = "1">会引起错误。
Freemarker是精确比较,所以对"x"、"x  "和"X"是不相等的。
还有>(或者gt)、>=(或者gte)、<(或者lt)、<=(或者lte):
对数字和日期可以使用<、<=、>和>=,但不能用于字符串。
由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来避免这种情况
例如<#if (x > y)>。
另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=。

逻辑运算符
逻辑与:&&(and)
逻辑或:||(or)
逻辑非:!(not)
逻辑运算符只能用于布尔值,否则会产生错误。
分享到:
评论

相关推荐

    jxl-report.jar 和 freemarker-util-0.0.1.jar

    jxl模板报表导出所需的jar包,使用该jar包可以直接在excel文档中写freemarker表达式

    freemarker总结

    FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , % 看如下的代码: ${ x * x - 100 } ${ x /2 } ${ 12 } 输出结果是: -75 2.5 2 在表达式中使用算术运算符时要注意以下...

    FreeMark学习笔记

    在FreeMarker表达式中使用数值需要注意以下几点: 1,数值不能省略小数点前面的0,所以".5"是错误的写法 2,数值8 , +8 , 8.00都是相同的 3,布尔值 直接使用true和false,不使用引号. 4,集合 集合以方括号包括,各集合...

    freemarker 自定义freeMarker标签

    NULL 博文链接:https://zhenghuazhi.iteye.com/blog/1923544

    freemarker资料集

    FreeMarker语法之表达式,FreeMarker如何生成静态页面,freemarker空值的多种处理方法,FreeMarker的优点和缺点,Freemarker的内置函数及用法

    freemarker语法完整版

    Freemarker页面语法 A 概念 最常用的 3 个概念 sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该ftl 文件的资源 ...

    freeMarker常用语法.txt

    FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为 interpolation(插值)。

    Freemarker中遍历list集合实例

    sequence 是集合(collection)的表达式,item 是循环变量的名字,不能是表达式。当在遍历 sequence 时,会将遍历变量的值保存到 item 中。 例如:&lt;#list userList as user&gt; …,userList 中封装了很多个 User 对象...

    FreeMarker语法

    FreeMarker语法描述 1.FTL指令规则 2.插值规则 3.表达式 4.FreeMarker的常用指令

    freemarker语法完整版.doc

    二、表达式 * 直接指定值:字符串、数字、布尔值、序列、散列等。 * 字符串可以由双引号或单引号括起来,其中的特殊字符需要转义。 * Raw字符串:有一种特殊的字符串被认为是纯文本,其中的\和{等不具有特殊含义,...

    FreeMarker模板文件的组成及基本语法详解(一)

    FreeMarker模板文件的组成及基本语法详解 FreeMarker模板文件由四部分组成:文本、注释、插值和FTL指令。文本是直接输出的部分,注释是以#--开头的格式部分,不会输出。插值是以${...}或#{...}格式的部分,将使用...

    FreeMarker标签、指令

    FTL指令规则,插值规则,表达式,FreeMarker 的常用指令,

    超完整FreeMarker中文教程,代码

    什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................

    freemarker入门Demo

    1、不能编写java代码,可以实现严格的mvc分离 2、性能非常不错 3、对jsp标签支持良好 4、内置大量常用功能,使用非常方便 5、宏定义(类似jsp标签)非常方便 6、使用表达式语言

    freemaker模板教程

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等...

    FreeMarker 手册

    3.3 表达式 ....................................................................................................... 27 3.4 插值 ............................................................................

    Struts2核心包

    ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,...

    FreeMarker模板引擎-其他

    几乎在任何地方都可以使用复杂表达式来指定值 命名的宏,可以具有位置参数和嵌套内容 名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突 输出转换块:在嵌套模板片段生成输出时...

    FreeMarker中文指导手册

    3.3 表达式 ....................................................................................................... 27 3.4 插值 ............................................................................

    Struts2用到的核心jar包

    用来支持ognl表达式的,类似于EL表达式,功能比EL表达式强大的多。 freemarker-2.3.15.jar freemarker是比jsp更简单好用,功能更加强大的表现层技术,用来替代jsp的。 在Struts2中提倡使用 freemarker模板,但实际...

Global site tag (gtag.js) - Google Analytics