Freemarker基础及用法

本文介绍了Freemarker模板引擎的基础知识及用法,包括模板文件的构成、表达式的使用方法、内置函数介绍以及常用指令如assign、list、if等的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是之前做后台开发的时候,用到了freemarker,然后自己整理的freemarker的基础知识和用法,一直想发,一直忘记发。。

Freemarker是一款模板引擎,是一个基于模板和数据模型,并用来生成输出的文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不面向最终用户,而是一个java类库,是一款程序员可以嵌入他们所开发产品的组件。模板是用FreeMarker Template Language(FTL)编写的,这是一种简单的、专用的语言。简单来说,模板就是用来定义如何展示数据,比如数据的格式、展示方式等等,而数据模型,就是为模板准备的数据整体,也就是要展示什么数据。

基本知识和用法:

一、首先,FreeMarker模板文件主要由以下4个部分组成:
1.文本:直接输出的部分
2.注释:<#--...-->
3.插值:用${...}或#{...}表示,将使用数据模型中的数据代替插值输出
4.FTL指令:和html标记类似,名字前有#,<#...></#...>或<#.../>,不会输出 另外,当使用的指令是用户指令而不是系统内建指令时,应该把#改成@
二、表达式
  表达式是FreeMarker模板的核心功能,它的功能非常强大,不仅支持直接指定值、输出变量值,也支持字符串格式化输出和集合访问等功能。
1.直接指定值
  使用直接指定值语法让FreeMarker直接输出插值中的值,而不是输出变量值
  ·字符串
   ${"K2DATA"}  输出:K2DATA  //字符串中包含特殊字符需要转译,如果某段文本中包含大量特殊字符,可以在指定字符串内容的引号前加r标记,r标记后的文本会直接输出
  ·布尔型
   ${true}  输出:false  //不使用引号
  ·集合
   ["K2","DATA"]  //还可以使用数字范围定义数字集合,例如2..5等同于[2,3,4,5]
  ·Map对象
   {"男生"20:,"女生":10}  //key-value之间用英文冒号分隔,多组key-value之间用英文逗号分隔
2.输出变量值
  输出变量值时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量
  ·顶层变量(直接放在数据模型中的值)
   例如有如下数据模型:
   Map root=new HashMap();   root.put("name","k2data");
   ${name}  输出:k2data
  ·集合元素
   ${data[3]}  输出:data集合的第四个元素  //data[3..5] 返回data集合的子集合,子集合中的元素是data集合的第4-6个元素
3.运算符
  ·算术运算符
   包括:+,-,*,/,%  
  ·比较运算符
   包括:=或==,!=,>或gt,>=或gte,<或lt,<=或lte
  ·逻辑运算符
   包括:逻辑与&&,逻辑或||,逻辑非!  //逻辑运算符只能作用与布尔值
4.内建函数
  ·FreeMarker还提供了一些内建函数用来转换输出,可以在变量后跟?,?后跟内建函数
  ·html:对字符串进行HTML编码
  ·cap_first:将字符串第一个字符大写
  ·lower_case:将字符串转成小写
  ·upper_case:将字符串转成大写
  ·trim:去掉字符串前后的空白字符
  ·size:获取集合中元素的个数
  ·int:获取数字的整数部分,结果带符号
三、常用指令
  FreeMarker的FTL指令也是模板的重要组成部分,这些指令可以实现对数据模型的迭代输出、分支控制等功能
1.assign指令
  assign指令是用来定义变量的,语法<#assign name=value> 
2.list指令
  list指令是一个迭代输出指令(类似与java中的循环),用于迭代输出数据模型中的集合,语法:
   <#list sequence as item>
   ...
   </#list>
  sequence是一个集合对象,也可以是一个返回集合对象表达式,item可以是任意名字,代表被迭代输出的集合元素,此外,还有两个特殊的循环变量,item-index:当前变量的索引值,item_has_next:是否存在下一个元素,可以使用<#break指令跳出迭代>
3.if指令
  if指令是分支控制指令,和java中的if类似,语法:
  <#assign money=50>
  <#if (money>200)>有钱人
  <#else if(money<100)>穷人
  <#else>普通人
  </#if>
  输出:穷人
4.switch指令
  分支控制指令,类似java中的switch语句,语法:
  <#switch value>  
  <#case refValue>...<#break> 
  <#default>... 
  </#switch> 
5.include指令
  include指令用于包含指定页,类似与jsp中的包含指令,语法:<#include filename>
6.noparse指令 
  noparse指令中间的内容会原样输出,语法:<#noparse>...</#noparse> 
7.escape指令 
  escape指令可以使body区的插值都自动加上escape表达式,语法
  <#escape x as x?lower_case> 
  First name:${firstName} 
  Last name:${lastName} 
  </#escape> 
  等同于:
  First name:${firstName?lower_case} 
  Last name:${lastName?lower_case} 


  因为我也是刚接触并学习freemarker没多久,所以有些地方可能理解的不到位,欢迎大家批评指正。以上只是FreeMarker的一点点,一点点点,有兴趣的童鞋可以和我一起讨论,一起学习。
  各IDE的FreeMarker插件: 点击打开链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值