freeMarker -introduce

数据类型
和java不同,FreeMarker不需要定义变量的类型,直接赋值即可。

字符串: value = “xxxx” 。如果有特殊字符 string = r"xxxx" 。单引号和双引号是一样的。

数值:value = 1.2。数值可以直接等于,但是不能用科学计数法。

布尔值:true or false。

List集合:list = [1,2,3] ; list=[1…100] 表示 1 到 100 的集合,反之亦然。

Map集合:map = {“key” : “value” , “key2” : “value2”},key 必须是字符串哦!

实体类:和EL表达式差不多,直接点出来。

字符串操作
字符串连接:可以直接嵌套${"hello , KaTeX parse error: Expected 'EOF', got '}' at position 8: {name}"}̲ ; 也可以用加号{"hello , " + name}

字符串截取:string[index]。index 可以是一个值,也可以是形如 0…2 表示下标从0开始,到下标为2结束。一共是三个数。

比较运算符
== (等于),!= (不等于),gt(大于),gte(大于或者等于),lt(小于),lte(小于或者等于)。不建议用 >,< 可能会报错!

一般和 if 配合使用

内建函数
FreeMarker 提供了一些内建函数来转换输出,其结构:变量?内建函数,这样就可以通过内建函数来转换输出变量。

  1. html: 对字符串进行HTML编码;
  2. cap_first: 使字符串第一个字母大写;
  3. lower_case: 将字符串转成小写;
  4. upper_case: 将字符串转成大写;
  5. size: 获得集合中元素的个数;
  6. int: 取得数字的整数部分。

变量空判断
!   指定缺失变量的默认值;一般配置变量输出使用
??  判断变量是否存在。一般配合if使用 <#if value??></#if>

宏指令
可以理解为java的封装方法,供其他地方使用。宏指令也称为自定义指令,macro指令

语法很简单:<#macro val > 声明macro </#macro>; 使用macro <@val />

命名空间

可以理解为java的import语句,为避免变量重复。一个重要的规则就是:路径不应该包含大写字母,使用下划线_分隔词语,myName --> my_name

语法很简单:<#import “xxx.ftl” as val>

其他没有说明的语法是因为和java一样,没什么特别之处。所以没有列出来。

${user!“default value”} --!给默认值
${user.name?? ? ‘存在’:‘失去’} – ??来询问一个变量是否存在


{ ‘firstName’: ‘John’, ‘lastName’: ‘Smith’, ‘age’: 25, ‘address’: { ‘streetAddress’: ‘21 2nd Street’, ‘city’: ‘New York’, ‘state’: ‘NY’, ‘postalCode’: 10021 }}

使用 ?eval 将从字符串转换为一个 JSON 对象,然后像其他数据一样在表达式中使用。

<#assign user = user?eval>

User: ${user.firstName}, ${user.address.city}


?:单个问号后面跟的是操作函数
也可以连着写${aaa?eval?default()}

!:

语法结构为:unsafe_expr!default_expr,
比如 ${mouse!"No mouse."} 当mouse不存在时,返回default value;
product.color!"red"将只处理color为miss value的情况
(product.color)!"red" 这种方式,能够处理product或者color为miss value的情况;

??:

测试是否为missing value
product.color??将只测试color是否为null
(product.color)??将测试product和color是否存在null

<#assign cname=r""> // ""里面放特殊字符

字符串截取 :
通过下标直接获取下标对应的字母: ${name[2]}
起点下标…结尾下标截取字符串:${name[0..5]}

<#assign number1 = 10>
<#assign number2 = 5>
"+" : ${number1 + number2}
"-" : ${number1 - number2}
"*" : ${number1 * number2}
"/" : ${number1 / number2}
"%" : ${number1 % number2}

比较运算符:

<#if number1 + number2 gte 12 || number1 - number2 lt 6>
"*" : ${number1 * number2}
<#else>
"/" : ${number1 / number2}
</#if>

内建函数:

<#assign data = "abcd1234">
第一个字母大写:${data?cap_first}
所有字母小写:${data?lower_case}
所有字母大写:${data?upper_case}
<#assign floatData = 12.34>
数值取整数:${floatData?int}
获取集合的长度:${users?size}
时间格式化:${dateTime?string("yyyy-MM-dd")}

空判断和对象集合:

<#if users??>
	<#list users as user >
	${user.id} - ${user.name}
	</#list>
<#else>
	${user!"变量为空则给一个默认值"}
</#if>

Map集合:

<#assign mapData={"name":"程序员", "salary":15000}>
直接通过Key获取 Value值:${mapData["name"]}

通过Key遍历Map:

<#list mapData?keys as key>
Key: ${key} - Value: ${mapData[key]}
</#list>

通过Value遍历Map:

<#list mapData?values as value>
Value: ${value}
</#list>

List集合:

<#assign listData=["ITDragon", "blog", "is", "cool"]>
<#list listData as value>${value} </#list>

include指令:

引入其他文件:<#include "otherFreeMarker.ftl" />

macro宏指令:

<#macro mo>
定义无参数的宏macro--${name}
</#macro>
使用宏macro: <@mo />
<#macro moArgs a b c>
定义带参数的宏macro-- ${a+b+c}
</#macro>
使用带参数的宏macro: <@moArgs a=1 b=2 c=3 />

命名空间:

<#import "otherFreeMarker.ftl" as otherFtl>
${otherFtl.otherName}
<@otherFtl.addMethod a=10 b=20 />
<#assign otherName="修改otherFreeMarker.ftl中的otherName变量值"/>
${otherFtl.otherName}
<#assign otherName="修改otherFreeMarker.ftl中的otherName变量值" in otherFtl />
${otherFtl.otherName}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值