freemarker之模板开发(模板表达式之直接指定值--详细)

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字符都需要用实体引用来代替(比如:<代替&lt;)

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.操作符的优先级(略)

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值