freemarker之模板开发(模板表达式之直接指定值--详细)
----------
freemarker之模板(表达式之直接指定值--详细)
1.字符串
在文本中确定字符串值的方法是看引号和单引号,比如:"some text"或'some text',这两种形式是
相等的。如果文本本身包含用于字符引用的引号或反斜杠时,应该在它们的前面再加一个反斜杠,这
就是转义。
2.数字
输入不带引号的数字就可以直接指定一个数字,必须使用点作为小数的分隔符而不能是其他的分组分隔符。
3.布尔值
直接写true或false就表征一个布尔值了,不需使用引号。
4.序列
指定一个文字的序列,使用逗号来分隔其中的每个子变量,然后把整个列表放到方括号中,如:
<#list ['winter','spring','summer','autumn'] as x>
${x}
</#list>
也可以用start..end定义存储数字范围的序列,这里的start和end是处理数字值表达式,比如:2..5
和[2,3,4,5]是相同的。但是使用前者会更有效率(内存占用少而且速度快)。可以看出前者也没有使用
方括号,这样也可以用来定义递减的数字范围,比如5..2。(此外,还可以省略end,只需5..即可,但
这样序列默认包含5,6,7,等递增量直到无穷大)
5.哈希表
在模板中指定一个哈希表,就可以遍历用逗号分隔开的"键/值"对,把列表放到花括号内。键和值成对出
现并以冒号分隔。看这个例子:{"name":"green mouse","price":150}。注意:用来检索的键必须是字符
串类型。
6.检索变量
a.顶层变量
为了访问顶层的变量,可以简单地使用变量名。如:${user}
b.从哈希表中检索数据
如例,我们可以通过book.title来读取title表达式。我们想指定同一个表达式的子变量,那么还有另外
一种语法格式:book["title"]。下面这样混合的方式也是可以的:
book.author.name,book["author"].name,book.author["name"],book["author"]["name"]
c.从序列中检索数据
这和从哈希表中检索是相同的,但是你只能使用方括号语法形式来进行,而且方括号内的表达式最终必须
是一个数字而不是字符串。如:animails[0].name。
d.特殊变量
特殊变量是由FreeMarker引擎本身定义的,语法如下:.variable_name。通常情况下是不需使用特殊变量的。
7.字符串操作
a.插值(或连接)
如果要在字符串中插入表达式的值,可以使用${...},如:${"hello ${user}!"}
b.获取一个字符
在给定索引值时可以获取字符串中的一个字符,如例,假设user是"Big Joe",那么:
${user[0]},${user[4]},将打印出:B,J.
8.序列操作
a.连接
序列的连接可以使用+号来进行,例如:
<#list ["Joe","Fred"] + ["Julia","Kate"] as user>
${user]
</#list>
要注意不要在很多重复连接时使用序列连接操作,比如在循环中往序列上追加项目,而这样的使用是可以的:
<#list users + admins as person>。尽管序列连接的很快,而且速度是和被连接序列的大小相独立的,
但是最终的结果序列的读取却比原先的两个序列慢那么一点。
9.序列切分
使用[firstindex..lastindex]可以获取序列中的一部分,这里的firstindex和lastindex表达式的结果是数字。
如:seq="abcdefg", seq[1..4]就等于bcde ,seq[3..]等于defg
10.哈希表操作
a.连接
像连接字符串那样,也可以使用+号的方式来连接哈希表。如果两个哈希表含有键相同的项,那么在+号右侧的
哈希表中的项目优先。如:
<#assign ages={"Joe":23,"Fred":25}+{"Joe":30,"Julia":18}>
Joe is ${ages.Joe}
Fred is ${ages.Fred}
Julia is ${ages.Julia}
将会打印出:
Joe is 30
Fred is 25
Julia is 18
11.算数运算
算数运算包含基本的四则运算和求模运算。如例:
${100-x*x},${x/2},${12*10}
有时我们只想获取计算结果的整数部分,这可以使用内建函数int来解决。如例:
${(x/2)?int}
${1.1?int}
12.比较运算
测试两个值相等使用= ,如例:<#if user = "Big Joe">
测试两个值不等使用!=,如例:<#if user != "Big Joe">
对数字和日期类型的比较,也可以使用<,<=,>=和>。不能把它们当作字符串来比较。如:
<#if x <= 12>
xxxxxx
</#if>
使用>=和>的时候有一点小问题。FreeMarker解释>的时候可以把当当作FTL标签的结束符。为了
避免这种问题,不得不将表达式放到括号内:<#if (x>y)>。
13.逻辑操作
常用的逻辑操作符:
a.逻辑或:||
b.逻辑与: &&
c.逻辑非:!
逻辑操作符仅仅在布尔值之间有效,若用在其它类型将会产生错误导致模板执行中止。
如例:
<#if x<12 && color = "green">
we have less than 12 things,and they are green.
</#if>
14.内建函数
正如其名,内建函数提供始终可用的内置功能。使用内建函数的语法和访问哈希表子变量的语法
很像,除了使用?号来代替点,其他都一样。例如得到字符串的大写形式:user?upper_case。
现在,我们只需要了解一些重要的内建函数就可以了。
字符串使用的内建函数:
a.html: 字符串中所有的特殊html字符都需要用实体引用来代替(比如:<代替<)
b.cap_first: 字符串的第一个字母变为大写形式
c.lower_case: 字符串的小写形式
d.upper_case: 字符串的大写形式
e.trim: 去掉字符串首尾的空格
序列使用的内建函数:
a.size: 序列中元素的个数
数字使用的内建函数:
a.int: 数字的整数部分(比如:-1.9?int就是-1)
15.方法调用
可以使用方法调用操作来使用一个已经定义过的方法。方法调用的语法形式是使用逗号来分割在
括号内的表达式而形成的参数列表,这些值就是参数。如例:
${repeat("what",3)}
16.处理不存在的值
a.默认值
使用形式概览:unsafe_expr!default_expr或unsafe_expr!或(unsafe_expr)!default_expr
或(unsafe_expr)!
如例:${mouse!"No mouse."}
默认值可以是任何类型的表达式,也可以不必是字符串。你可以这样写:hits!0或
colors!["red","green","blue"]。
注意:如果在!后面有复合表达式,如1+x,通常使用括号,像:${x!(1+y)},这样就根据
你的意图来确定优先级。
如果默认值被省略了,那么结果将会是空串,空序列或空哈希表。如果想让默认值为0或false。
则注意不能省略它。
在不是顶层变量时,默认值操作符可以有两种使用方式:
如例:product.color!"red"
如果是这样的写法,那么在product中,当color不存在时(返回"red")将会被处理。但是如果连
product都不存在时将不会处理。也就是说这样写时变量product必须存在,否则会报错。
如果:(product.color)!"red"
这时,如果product不存在或者product存在而color不存在,都能显示默认值"red",而不会报错。
b.检测不存在的值
使用形式如:unsafe_expr??或者(unsafe_expr)??
这个操作符告诉我们一个值是否存在。基于这种情况,结果是true或false。
如例:
<#if mouse??>
Mouse found
</#else>
No mouse found
</#if>
访问非顶层变量的使用规则和默认值操作符也是一样的,即product.color??和(product.color)??。
17.括号
括号可以用来给表达式分组
如:${3*2+2} , ${3*(2+2)} , ${("green"+"mouse")?upper_case}
18.表达式中的空格
FTL忽略表达式中的多余空格
19.操作符的优先级(略)
分享到:
相关推荐
注意在ftl文件里布尔值都是直接赋值 的如parse=true,而不是parse="true" 用例 /common/copyright.ftl 包含内容 Ftl代码 Copyright 2001-2002 ${me} All rights reserved. Copyright 2001-2002 ${me} ...
jxl模板报表导出所需的jar包,使用该jar包可以直接在excel文档中写freemarker表达式
几乎在任何地方都可以使用复杂表达式来指定值 命名的宏,可以具有位置参数和嵌套内容 名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突 输出转换块:在嵌套模板片段生成输出时...
这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变 量完全相同. 为了处理缺失...
表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker 标签结合,用于控制输出.实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出...
freeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具 3.commons-logging-1.1.1.jar Jakarta的通用日志记录包 4.ognl-3.0.3.jar 支持ognl表达式 5.xwork-core-2.3.1.1.jar xwork的包 由于Struts2是由xwork...
无需编写充满引号和连接运算符的复杂字符串表达式(如您目前所做的那样),只需在您喜欢的 IDE 中编写和编译带有 FTL 宏的普通 SQL 或 PL/SQL 代码,并支持其内容/代码辅助功能。 不是 Oracle 用户? 没问题。 FTLDB...
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等...
Struts2用到的核心jar包: ... 在Struts2中提倡使用 freemarker模板,但实际项目中使用jsp也很多。 commons-fileupload-1.2.1.jar 用于实现文件上传功能的jar包。 使用时候将5个Struts2的核心Jar包到WEB-INF/lib/下
第一部分 模板开发指南 ................................................................................................. 10 第一章 模板开发入门 ............................................................
freemarker-2.3.16.jar:Struts 2的UI标签的模板使用FreeMarker编写。 commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件。 commons-io-1.3.2.jar:IO输入输出流组件,主要完成文件的读写功能...
包含以下jar文件 commons-fileupload-1.2.2.jar 【文件上传相关包】 commons-io-2.0.1.jar ...freemarker-2.3.19.jar 【struts的标签模板库jar文件】 javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】
Beetl相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下:1、功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。...
该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板。 struts.configuration.xml.reload 该属性设置当struts.xml文件改变后,系统是否...
web开发常用jar包 常用jar包 commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,...
它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 3. Thymeleaf 提供spring标准方言和一个与 ...
它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 3.Thymeleaf 提供spring标准方言和一个与 ...
它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 3. Thymeleaf 提供spring标准方言和一个与 ...
输出 (2)数据模型 (3)模板 2、数据模型 (1)基础 (2)Scalar变量 (3)hashes 、sequences和集合 (4)方法 (5)宏和变换器 (6)节点 3、模板 (1)整体结构 (2)指令...