Freemarker教程2(表达式和常用指令)

简介: Freemarker教程2(表达式和常用指令)


表达式

直接指定值

直接显示字符串

${'hello freemarker'}<br>

显示集合

<#list ["aa","bb","cc"] as c> 
  ${c}<br>
</#list>

image.png

输出变量

集合

@RequestMapping("/hello1")
  public String hello1(Model m){
    m.addAttribute("list", Arrays.asList("LOL","DNF","CS"));
    return "index2";
  }
<#list list as x>
  ${x}<br>
</#list>

image.png

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>

image.png

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>

image.png

字符串操作

1.字符串拼接

m.addAttribute("hello", "hello freemarker");
<#--方式一 直接拼接 -->
hello${hello}<br>
<#--方式二 + -->
${"hello"+hello}<br>
<#--方式三 ""中通过${}取值-->
${"hello${hello}"}

image.png

字符串截取

<#-- 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-->

image.png

集合连接

提前定义两个集合,在遍历时做集合的拼接运算

image.pngimage.png

算数运算

算数运算包含基本的四则运算和求模运算,运算符有:

 

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

比如:

  ${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

比较运算符

image.png

逻辑操作

常用的逻辑操作符:

 

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

逻辑操作符仅仅在布尔值之间有效,若用在其他类型将会产生错误导致模板执行中止

内置函数

 内建函数就像FreeMarker在对象中添加的方法一样。 要防止和实际方法和其它子变量的命名冲突,则不能使用点 (.),这里使用问号 (?)来和父对象分隔开。 比如,想要保证 path 有起始的 / ,那么可以这么来写: path?ensure_starts_with(’/’)。 path 后的Java对象(通常就是 String) 并没有这样的方法,这是FreeMarker添加的。为了简洁,如果方法没有参数, 那么就可以忽略 (),比如想要获取 path 的长度,就可以写作:path?length, 而不是 path?length()

image.png

演示:

image.png

  ${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>

image.png

更多内置函数见此:完整内建函数参考-官方

空值处理

处理不存在的值

!的使用

${vvv!"222"}<br><#--如果vvv为空就显示222否则显示vvv对应的值-->

image.png

??的使用

 不存在值检测操作符,这个操作符告诉我们一个值是否存在。基于这种情况, 结果是 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>

输出:

image.png

常用指令

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

跳出循环的用法

  <#list list+list2 as x>
    <#if x=='CS'>
      <#break> <#--终止循环-->
    <#else>
    ${x}<br>
    </#if>
  </#list>
相关文章
|
4月前
|
索引
FreeMarker - 常用指令和宏
FreeMarker - 常用指令和宏
49 0
|
15天前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
4月前
|
Java
FreeMarker - 四种变量的用法
FreeMarker - 四种变量的用法
213 1
|
9月前
模板引擎基本语法
模板引擎基本语法
|
XML 移动开发 JSON
Thymeleaf简介-HelloWorld基本语法:
Thymeleaf简介-HelloWorld基本语法:
71 0
|
前端开发 Java
thymeleaf 入门篇(一),简单语法介绍
thymeleaf 入门篇,基本语法介绍
173 0
|
开发框架 前端开发 JavaScript
FreeMarker的基本语法
FreeMarker的基本语法
176 0
FreeMarker的基本语法
|
前端开发
Thymeleaf 语法学习
Thymeleaf 语法学习,要学习语法,还是参考官网文档最为准确,我们找到对应的版本看一下;
Thymeleaf 语法学习
|
Java 开发者
thymeleaf 语法|学习笔记
快速学习 thymeleaf 语法
241 0