SpringBoot+FreeMarker 学习(七)FreeMarker变量类型及表达式

字符串

用双引号或单引号引起来的部分就是字符串,双引号和单引号意义相同,如果想在字符串中定义双引号或单引号,可以用转义字符。

<#assign str="123" str1="123\"456\'789">

我们知道${name}是一个插值,如果想在字符串中就是想定义这种格式的字符串,而不是是用插值。可以在字符串前加r,表示这个字符串是原生字符串。

<#assign a="${user}">
<#assign b=r"${user}">

注意这两个的区别,上一个是插值,下一个是原生字符串。

字符串可以用+直接拼接

<#assign a="hello ${user}">
<#assign a="hello" + user>

这两种定义方式,含义相同。

获取字符

给定索引值时,可以获取字符串中的某一个字符

<#assign str="abcd">
${str[0]}

字符串切分

用一个值域可以获取字符串的某一部分。

值域的含义如下

start..end: 包含结尾的值域。比如 1..4 就是 [1, 2, 3, 4], 而 4..1 就是 [4, 3, 2, 1];

start..<end 或 start..!end: 不包含结尾的值域。比如 1..<4 就是 [1, 2, 3]4..<1 就是 [4, 3, 2;

start..*length: 限定长度的值域,比如 10..*4 就是 [10, 11, 12, 13]10..*-4 就是 [10, 9, 8, 7];

start..: 无右边界值域。这和限制长度的值域很像,只是长度是无限的。 比如 1.. 就是 [1, 2, 3, 4, 5, 6, ... ],直到无穷大。

<#assign s = "ABCDEF">
${s[2..3]}
${s[2..<4]}
${s[2..*3]}
${s[2..*100]}
${s[2..]}

对应的结果是

CD
CD
CDE
CDEF
CDEF

数字

输入不带引号的数字就可以直接指定一个数字, 必须使用点作为小数的分隔符而不能是其他的分组分隔符。 可以使用 - 或 + 来表明符号 (+ 是多余的)。 科学记数法暂不支持使用 (1E3 就是错误的), 而且也不能在小数点之前不写0(.5 也是错误的)。

下面的数字都是合法的:0.08, -5.0138, 00811, +11

请注意,像 08、 +8、 8.00 和 8 这样的数值是完全等同的,它们都是数字8。 所以, ${08}${+8}、 ${8.00} 和 ${8} 的输出都是一样的。

布尔值

直接写 true 或者 false 就表示一个布尔值了,不需使用引号。

序列

使用逗号来分隔其中的每个子变量,然后把整个列表放到方括号中。

<#assign list=["a", "b", "c"]>
<#assign list1=[3, list, "b"]>

序列支持用+进行拼接

<#assign list2 = list1 + list>

序列也可以用值域来切分

<#assign list=["a", "b", "c"]>

1、<#list list[0..*2] as i>${i}</#list>
2、<#list list[1..*2] as i>${i}</#list>
3、<#list list[2..*2] as i>${i}</#list>
4、<#list list[3..*2] as i>${i}</#list>
5、<#list list[0..] as i>${i}</#list>
6、<#list list[1..] as i>${i}</#list>
7、<#list list[2..] as i>${i}</#list>
8、<#list list[3..] as i>${i}</#list>

对应的结果

1、ab
2、bc
3、c
4、
5、abc
6、bc
7、c
8、

哈希表

在模板中指定一个哈希表,就可以遍历用逗号分隔开的"键/值"对, 把列表放到花括号内即可。键和值成对出现并以冒号分隔。请注意名字必须是字符串,值可以是任意类型。

<#assign map={"name": "zhangsan", "age":18, "score":[80, 90, 100]}>

从哈希表中检索数据,可以用点也可以用方括号变量名。

${map.name}
${map["age"]}

数学符号

加法:+    减法:-   乘法:*   除法:/   求模 (求余):%

+除了进行数学运算,还能进行拼接,可以是字符串也可以是其他类型

比较符号

判断是否相等==,是否不相等!=,还有>,<,>=,<=。因为< >这两个符号本身也是标签的开始和结束符号,建议使用 lt(<) lte(<=) gt(>) gte(>=)来替代使用,避免解析错误。

逻辑符号

逻辑 或: ||      逻辑 与: &&       逻辑 非: !

逻辑操作符仅仅在布尔值之间有效。

处理不存在的值

当试图访问一个不存在的变量时, FreeMarker 将会报错而导致模板执行中断。

默认值操作符

unsafe_expr!default_expr 或 unsafe_expr! or (unsafe_expr)!default_expr 或 (unsafe_expr)!

${mouse!"No mouse."}
<#assign mouse="mouse">
${mouse!"No mouse."}

将会输出

No mouse.
mouse

注意这两种写法的区别

${user.name!"no name"}
${(user.name)!"no"}

上面的写法,要求user存在,但是name可以不存在,如果user不存在将会报错。

下面的写法,无论user不存在还是user.name不存在,都将被默认值no取代,不会报错。

不存在值检测操作符

使用形式: unsafe_expr?? 或 (unsafe_expr)??

<#if mouse??>
    Mouse found
<#else>
    No mouse found
</#if>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LO嘉嘉VE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值