表达式
直接指定值
直接显示字符串
${'hello freemarker'}<br>
显示集合
<#list ["aa","bb","cc"] as c> ${c}<br> </#list>
输出变量
集合
@RequestMapping("/hello1") public String hello1(Model m){ m.addAttribute("list", Arrays.asList("LOL","DNF","CS")); return "index2"; }
<#list list as x> ${x}<br> </#list>
Map
@RequestMapping("/hello1") public String hello1(Model m){ m.addAttribute("list", Arrays.asList("LOL","DNF","CS")); Map<String, Object> map = new HashMap<>(); map.put("id", 12); map.put("name", "波波烤鸭"); map.put("address", "深圳"); m.addAttribute("user", map); return "index2"; }
<hr> ${user.id}<br> ${user['name']}<br> ${user['address']}<br>
Map包含对象
@RequestMapping("/hello2") public String hello2(Model m){ Map<String, Object> map = new HashMap<>(); User user = new User(); user.setId(4); user.setName("烤鸭"); user.setAddress("深圳固戍"); map.put("user", user); m.addAttribute("m", map); return "index3"; }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> hehe<br> ${m.user.id}<br> ${m['user'].name}<br> ${m['user']["address"]}<br> </body> </html>
字符串操作
1.字符串拼接
m.addAttribute("hello", "hello freemarker");
<#--方式一 直接拼接 --> hello${hello}<br> <#--方式二 + --> ${"hello"+hello}<br> <#--方式三 ""中通过${}取值--> ${"hello${hello}"}
字符串截取
<#-- hello freemark --> ${hello}<br> <#-- 显示 hello freemark --> ${hello[1]}<br> <#-- 显示 e--> ${hello[4]}<br><#-- 显示 o--> ${hello[1..4]}<br><#-- 显示 ello --> ${hello[1..3]}<br><#-- 显示 ell--> ${hello[3..6]}<br><#-- 显示 lo f--> ${hello[5..]}<br><#-- 显示 freemarker-->
集合连接
提前定义两个集合,在遍历时做集合的拼接运算
算数运算
算数运算包含基本的四则运算和求模运算,运算符有:
加法: + 减法: - 乘法: * 除法: / 求模 (求余): %
比如:
${100 - x * x} ${x / 2} ${12 % 10}
输出
75 2.5 2
结果转换为整数
<#assign x=5/> ${(x/2)?int}<br> ${1.1?int}<br> ${1.999?int}<br> ${-1.1?int}<br> ${-1.999?int}<br>
输出:
1 1 -1 -1
比较运算符
逻辑操作
常用的逻辑操作符:
逻辑 或: || 逻辑 与: && 逻辑 非: !
逻辑操作符仅仅在布尔值之间有效,若用在其他类型将会产生错误导致模板执行中止
内置函数
内建函数就像FreeMarker在对象中添加的方法一样。 要防止和实际方法和其它子变量的命名冲突,则不能使用点 (.),这里使用问号 (?)来和父对象分隔开。 比如,想要保证 path 有起始的 / ,那么可以这么来写: path?ensure_starts_with(’/’)。 path 后的Java对象(通常就是 String) 并没有这样的方法,这是FreeMarker添加的。为了简洁,如果方法没有参数, 那么就可以忽略 (),比如想要获取 path 的长度,就可以写作:path?length, 而不是 path?length()
演示:
${mypage}<br> ${mypage?html}<br> ${hello?upper_case}<br> ${hello?cap_first}<br> ${hello?lower_case}<br> ${list?size}<br> <#assign x=now> ${x?date}<br> ${x?time}<br> ${x?datetime}<br>
更多内置函数见此:完整内建函数参考-官方
空值处理
处理不存在的值
!的使用
${vvv!"222"}<br><#--如果vvv为空就显示222否则显示vvv对应的值-->
??的使用
不存在值检测操作符,这个操作符告诉我们一个值是否存在。基于这种情况, 结果是 true 或 false, ??判断变量是否为空
<#if mouse??> Mouse found <#else> No mouse found </#if> Creating mouse... <#assign mouse = "Jerry"> <#if mouse??> Mouse found <#else> No mouse found </#if>
输出:
常用指令
if
和java中的用法一样
<#--定义变量age且赋值--> <#assign age=22> <#if age == 18> 18 .... <#elseif age gt 18> 192021... <#else> 1516... </#if>
switch
和java中的switch语句一样
<#assign i=2> <#switch i> <#case 1> ok <#break> <#case 2> no <#break> <#default> ... </#switch>
list+break
跳出循环的用法