简介
Java程序员偶尔使用freemarker在java代码中生成网页,用于后端生成文件。freemarker是一款模板引擎,基于模板(templete)和原始数据(original data),生成目标文本(target data)的通用工具。广义来讲freemarker能够生成任何形式的数据。
原始数据
以下json数据作为freemarker初探章节的原始数据
{
"name": "张三",
"age": 30,
"computer" : "{\"name\":\"戴尔\",\"cpu\":8,\"memory\":16}",
"phone": [
{
"name": "小米",
"buyTime": "2020"
},
{
"name": "华为",
"buyTime": "2022"
}
]
}
freemarker初探
以下模板数据测试以原始数据章节json作为original data
1.注释
<#-- 自定义方法 -->
2.输出数据
${phone}
${name}
3.判断
<#if age == 30>
三十而立
<#else>
未知年龄
</#if>
4.循环
<#list phone as p>
${p}
</#list>
5.定义变量
<#-- 定义普通变量 -->
<#assign myAge = age>
${myAge}
<#-- 定义表达式变量 -->
<#assign phoneName>
<#-- 这里没有分行写是为了防止输出字符串里面有回车 -->
<#list phone as p>${p.name}<#sep>,</#list>
</#assign>
${phoneName}
6.定义方法
<#-- 自定义方法 -->
<#function selectPayChannel id>
<#switch id>
<#case "116500205">
<#-- 直接return替换break使用 -->
<#return 'ALIPAY'>
<#default>
<#return 'CASH'>
</#switch>
</#function>
<#-- 注意:这里的参数必须要是字符串 -->
${selectPayChannel("123")}
7.数字保留两位小数(四舍五入)
${0.666?string["0.##"]}
8.字符串转换为json格式
${computer?eval.name}
<#-- 注意:直接输出${computer?eval}会出现异常【but this has evaluated to an extended_hash (wrapper: f.c.HashLiteral$SequenceHash)】,因为computer通过eval后类型是对象,不能直接转换为字符串输出,可以搭配变量使用 -->
<#assign myComputer = computer?eval>
${myComputer.name}