freemarker模板上主要由一下4个部分组成:

1、注释,即<#‐‐和‐‐>,介于其之间的内容会被freemarker忽略;
2、插值(Interpolation):即${..}部分,freemarker会用真实的值代替${..};
3、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑;
4、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。

FTL指令

1. assign指令

此指令用于在页面上定义一个变量

(1)定义简单类型:

<#assign linkman="周先生">联系人:${linkman}

(2)定义对象类型:

<#assign info={"mobile":"13301231212",'address':'北京市昌平区王府街'} >电话:${info.mobile}  地址:${info.address}

2. include指令

此指令用于模板文件的嵌套
创建模板文件head.ftl

<h1>郭豪信息网</h1> 我们修改test.ftl,在模板文件中使用include指令引入刚才我们建立的模板 ``` <#include "head.ftl"> ```

3. if指令

在模板文件上添加

<#if success=true>你已通过实名认证
<#else>  你未通过实名认证
</#if>

在代码中对str变量赋值

map.put("success", true);

在freemarker的判断中,可以使用= 也可以使用==

4. list指令

需求,实现商品价格表,如下图:

(1)代码中对变量goodsList赋值

List goodsList=new ArrayList();Map goods1=new HashMap();
goods1.put("name", "苹果");
goods1.put("price", 5.8);
Map goods2=new HashMap();
goods2.put("name", "香蕉");
goods2.put("price", 2.5);
Map goods3=new HashMap();
goods3.put("name", "橘子");
goods3.put("price", 3.2);
goodsList.add(goods1);
goodsList.add(goods2);
goodsList.add(goods3);
map.put("goodsList", goodsList);

(2)在模板文件上添加

----商品价格表----<br>
<#list goodsList as goods>${goods_index+1} 商品名称: ${goods.name} 价格:${goods.price}<br>
</#list>

如果想在循环中得到索引,使用循环变量+_index就可以得到。

5. 内建函数

内建函数语法格式: 变量+?+函数名称

5.1 获取集合大小

我们使用size函数来实现,代码如下:

共  ${goodsList?size}  条记录
5.2 转换JSON字符串为对象

我们通常需要将json字符串转换为对象,那如何处理呢?看代码

<#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
<#assign data=text?eval />
开户行:${data.bank}  账号:${data.account}
5.3 日期格式化

代码中对变量赋值:

dataModel.put("today", new Date());

在模板文件中加入

当前日期:${today?date} <br>
当前时间:${today?time} <br>
当前日期+时间:${today?datetime} <br>
日期格式化:  ${today?string("yyyy年MM月")}

运行效果如下:

5.4 数字转换为字符串

代码中对变量赋值:

map.put("point", 102920122);

修改模板:

累计积分:${point}

页面显示:

我们会发现数字会以每三位一个分隔符显示,有些时候我们不需要这个分隔符,就需要将数字转换为字符串,使用内建函数c

累计积分:${point?c}

页面显示效果如下:

6. 空值处理运算符

如果你在模板中使用了变量但是在代码中没有对变量赋值,那么运行生成时会抛出异常。但是有些时候,有的变量确实是null,怎么解决这个问题呢?

6.1 判断某变量是否存在:“??”

用法为:variable??,如果该变量存在,返回true,否则返回false

<#if aaa??>aaa变量存在
<#else>aaa变量不存在
</#if>
6.2缺失变量默认值:“!”

我们除了可以判断是否为空值,也可以使用!对null值做转换处理 在模板文件中加入

  ${aaa!'-'}

在代码中不对aaa赋值,也不会报错了,当aaa为null则返回!后边的内容-

7. 运算符

7.1 算数运算符

FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , %

7.2 逻辑运算符

逻辑运算符有如下几个: 
逻辑与:&&
逻辑或:|| 
逻辑非:! 
逻辑运算符只能作用于布尔值,否则将产生错误

7.3 比较运算符

表达式中支持的比较运算符有如下几个: 
1 =或者==:判断两个值是否相等.
2 !=:判断两个值是否不等.
3 >或者gt:判断左边值是否大于右边值
4 >=或者gte:判断左边值是否大于等于右边值
5 <或者lt:判断左边值是否小于右边值
6 <=或者lte:判断左边值是否小于等于右边值

注意: =和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:

<#if (x>y)>

freemarker ftl模板语法和指令相关推荐

  1. freemarker ftl模板_Web开发人员必会的模板引擎技术之Freemarker

    曾几何时,Web开发是个多么高大上的名字,程序猿们都以能搞定Web技术为荣,此时还没有前后端之说.然而随着互联网的发展,社会分工进一步细化,职业岗位也更加细分,慢慢开始有了前端攻城狮和后端攻城狮,技术 ...

  2. freemarker/ftl模板/导出doc 单元格合并注意事项

    在现有模板上添加新表格数据      word 导出 2003版xml 和默认版本xml  是有区别的,如果已经创建好的ftl模板文件,后期维护添加图表,则必须使用同样版本的xml进行模板数据的追加. ...

  3. freemarker/ftl模板/导出doc 单元格合并注意事项(一)

    在现有模板上添加新表格数据      word 导出 2003版xml 和默认版本xml  是有区别的,如果已经创建好的ftl模板文件,后期维护添加图表,则必须使用同样版本的xml进行模板数据的追加. ...

  4. 前端之Vue:模板语法、指令、Style 和 Class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制

    目录 一. 模板语法 插值语法 二. 指令 2.1 文本指令 v-html:让HTML渲染成页面 v-text:标签内容显示js变量对应的值 v-show:显示/隐藏内容 v-if:显示/删除内容 2 ...

  5. 学习Vue3 第四章(模板语法 vue指令)

    模板插值语法 在script 声明一个变量可以直接在template 使用用法为{{变量名称}} <template><div>{{ message }}</div> ...

  6. freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧

    点击蓝字 轻松关注 CV 工程师你好,以下内容会让你感觉到不适,慎入! 在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一 ...

  7. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

    今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...

  8. Vue3零基础学习指南之Vue基础(1)— 模板语法与指令

    目录 概述 安装 实例化 文本渲染(v-text.v-html) 属性渲染(v-bind) 条件渲染(v-if.v-else-if.v-else) 列表渲染指令(v-for) 遍历数组 遍历对象 范围 ...

  9. java ftl 模板 输出list_java freemarker .ftl模板导出word文档(含文字,List, 图片)

    此处只介绍word模板部分,java代码等请自行百度,都一样. 辅助工具:notepad++,百度在线xml格式化 A.不含遍历的简单处理 不含遍历的简单处理 简单的一个key一个值使用比较简单,主要 ...

最新文章

  1. AI一眼识别这是什么鸟 “我们来找茬”十级选手诞生
  2. 文件服务器安全,文件服务器安全
  3. Java学习笔记(13)
  4. 黄金法则之《终身学习》
  5. 前端HTML5CSS3动画
  6. linux增量安装tomcat_linux与windows下tomcat的java内存设置
  7. [Java基础]List集合子类特点
  8. ADT-bundle
  9. RACSignal的Subscription深入分析
  10. CodeForces 615C
  11. 如何查看交换机某端口下接什么设备
  12. Authentication failed for 错误
  13. 【长篇肝文7万字】模电/数电/单片机/计算机组成原理/电力电子常见笔试/面试题(合集)未完更新ing
  14. ArcGIS 纵断面分析
  15. 在个人博客网站上添加QQ邮箱的邮我功能
  16. windows 10远程桌面连接报错解决办法
  17. Global Tracking Transformers 详细解读
  18. matlab画二项式随机变量的pmf,概率中的PDF,PMF,CDF
  19. 如何用串口助手测试软件485通讯功能,串口调试助手如何检测RS485端口好坏及信号发送的好坏?...
  20. please insert the disc labeled ‘Ubuntu 18.04.5 LTS _Bionic Beaver_ - Release amd64 (20200806.1)‘ in

热门文章

  1. 【51nod】2591 最终讨伐
  2. 我在哪?要到哪里去?怎么去?
  3. WEB前端面试常见的问题及答案
  4. 适配ipad Pro
  5. 数据分析实用工具——EXCEL下的power query自动取数
  6. 手把手教你开发一款简单的AR软件
  7. Windows11中无法找到Office 2019 application的解决方案
  8. 周志华 《机器学习初步》模型评估与选择
  9. 《深入理解Java虚拟机》内存管理机制 部分 读书笔记
  10. 2022阿里云国际注册教程-不用绑定paypal注册-Unirech阿里云代充