ITPub博客

首页 > IT职业 > IT图书 > 模板引擎之------freemarker

模板引擎之------freemarker

IT图书 作者:kissxun 时间:2021-09-09 08:59:49 0 删除 编辑

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
Freemarker是一个基于Java语言的模板引擎,不是web框架,是一个试图层的组件,主要用于解析服务器端的数据,并展示到视图层。
语法:
JAVA中常用的数据模型 :
基本类型数据(比如Integer)
封装的对象类型(比如User对象)
集合类型(List Map)

取值指令 :
常用${var}语法进行取值
对null、不存在对象取值${var!}
取包装对象的值,通过“点”语法:${User.name}
取值的时候进行计算,赋值
Date类型格式${data?String('yyyy-MM-dd')}
如何转义HTML内容:${var?html}
函数:
(一)处理字符串内建函数:
substring 字符串的截取
cap_first 首字母变大写
ends_with 以...结尾的函数
contains 字符串是否包含目标字符串的函数
如何把一个字符串转化为date 、datetime 、time类型的函数 date datetime time;
starts_with 字符串以...开始
index_of 字符串所在的位置
last_index_of 字符串最后所在的位置
split 分割字符串
trim 去掉字符串两头的空格
等函数
(二)处理数字的内建函数
string x?string("0.##") 对数字进行格式化
round 四舍五入
floor 把小数点去掉
ceiling 数字进1,变成整数
(三)处理list内建函数:
first 取list第一个值
last 取list最后一个值
seq_contains 这个序列是否包含
seq_index_of 这个序列所在的位置
size list长度
reverse 倒序
sort 升序排序
sort_by 根据属性排序
trunk 把字符串分块处理
(四)其他内建函数
is函数:判断变量的类型
is_string 字符串
is_number 整数
is_method 方法
() 对变量进行判断
hs_content 判断对象是否是空值,是不是有内容
eval 求值函数

更多语法,在这里不再列举
实例代码:
(一)





freemarker

取值:

  • 整数:${intVar}
  • 长整数:${LongVar}
  • 双精度:${doubleVar}
  • 字符串:${StringVar}
  • 布尔值: ${booleanVar?string('yes','no')}
  • 日期类型Java.Util.Date:${dateVar1?string('yyyy-MM-dd HH:mm:ss')}
  • 空值:${nullVar1!}
  • 空值:${nullVar!'我是默认值'}
  • 不存在的变量:${变量!'我是默认变量'}
  • 不存在的变量1:${free!'我是默认变量'}

  • 赋值&运算
  • a = ${a}
    a+100= ${a+100}

(二)





freemarker

freemarker实现遍历list集合

  • 集合list
  • ${item}
    #list>

if表达式

  • if
  • var=99 #if>
    var=99 var!=99#if>
    99> <!-- > 大于 --> var大于99 var=99 var小于99 #if>
  • if多条件 ||,&&,!
  • python or java
    #if> python length 6
    #if> python length 6或者Java

    #if> python length 6或者Java

    #if>

(三)





freemarker

freemarker遍历map集合

  • 集合map
  • ${key}:${map[key]}
    #list>

switch语句

  • switch,case,break,default
  • 星期一 星期二 星期三 星期四 星期五 星期六 星期日 无效的星期 #switch>

  • switch,case,break,default
  • 我是java 我是python 我是C语言 我是谁?谁是我? #switch>

(四)





freemarker内建函数

内建函数

    1,字符串内建函数

  • ${item}
  • #list>

字符串转日期

  • ${var1}
  • ${var2}
  • ${var3}

数字类型的内建函数

  • 格式化:${numVar1?string("0.##")}
  • 四舍五入:${numVar1?round}
  • 去掉小数点:${numVar1?floor}
  • 进1:${numVar1?ceiling}

list内建函数

  • 分块处理取长度:${listVar1?chunk(4)?size}
  • 长度:${listVar1?size}
  • ${item}
  • #list>
  • 取list第一个值:${listVar1?first}
  • 取list最后一个值:${listVar1?last}

其他内建函数

  • ${sVar?is_number?string('yes','no')}
  • ${sVar?has_content?string('yes','no')}
  • ${"1"+"2"?eval}
  • ${(1+2)?eval}
  • ${"1"+"2"?is_string?string('yes','no')}
  • ${("1"+"2")?is_string?string('yes','no')}

(五)





Insert title here

macro,nested,return:实战demo

1.macro:宏指令

  • FreeMarker:无参数的macro
  • 我是无参数的macro #macro>
  • Freemarker2:有参数的macro
  • 我是有参数的macro,paeam1=${param1},param2=${param2}
    #macro>
  • Freemarker3:有参数的macro
  • 我是有参数的macro,paeam1=${param1},param2=${param2}
    #macro>
  • Freemarker4:有多个参数的macro
  • 我是有参数的macro,paeam1=${param1},param2=${param2}
    ${paramExt['param3']} ${paramExt['param4']} #macro>

2,nested

    ${param1}

    #macro>
  • 调用
  • hello ${loopVar1},${loopVar2}
    @test> hello ${loopVar1}
    @test>

3,函数

    #function>
  • 调用
  • 你好,我是调用${doAdd(100,100)}

更多代码在这里不再一一列举,感兴趣的朋友可以到我的github上下载源码。此代码基于SpringBoot实现,后台还有众多Java代码。感谢各位的支持!
源代码地址:
https://github.com/JavaCodeMood/freemarker

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2766/viewspace-2798415/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-16

  • 博文量
    97
  • 访问量
    1042