Apache FreeMarker
Posted 遇事不决,可问神奇海螺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache FreeMarker相关的知识,希望对你有一定的参考价值。
基本语法
${…}:
称为interpolations,FreeMarker会在输出时用实际值进行替代。
<#…>:
FTL标记(FreeMarker模板语言标记),类似于html标记,为了与HTML标记区分
<@>:
宏,自定义标签
1, 文本: 直接输出的部分
2, 注释: <#-- --> 格式部分,不会输出
3, 插值: 即 ${} 或 #{} 格式的部分,将使用数据模型中的部分替代输出
FreeMarker的插值有如下两种类型:
1, 通用插值 ${}
2, 数字格式化插值: #{expr} 或 #{expr;format}
通用插值:
对于通用插值,又可以分为以下4种情况:
1, 插值结果为字符串值: 直接输出表达式结果
字符串输出: ${"Hello ${name}"} / ${"Hello " + name}
字符串截取:
通过下标直接获取下标对应的字母: ${name[2]}
起点下标..结尾下标截取字符串: ${name[0..5]}
2, 插值结果为数字值: 根据默认格式将表达式结果转换成文本输出
<#assign answer=42/>
${answer?string.number} //42
${answer?string.percent} //4200%
3, 插值结果为日期值: 根据默认格式将表达式结果转换成文本输出
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")} //2008-04-08 08:08:08 Pacific Daylight Time
${lastUpdated?string("EEE, MMM d, yy")} //Tue, Apr 8, 03
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")} //Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4, 插值结果为布尔值: 根据默认格式将表达式结果转换成文本输出
<#assign foo=true/>
${foo?string("yes", "no")} //yes
数字格式化插值:
数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
<#assign y=4/>
#{x; m1M2} //4.0
4, FTL指令: FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出
在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的:
1, 开始标签: <#directivename parameter>
2, 结束标签: </#directivename>
3, 空标签: <#directivename parameter/>
使用标签时前面的符号 # 也可能变成 @, 如果该指令是一个用户指令而不是系统内建指令时, 应将 # 符号改成 @ 符号
<#assign/>:
在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量
<#setting name=value>:
用来设置整个系统的一个环境:<#setting locale="en_US">
比较运算符:
<#if number1 + number2 gte 12 || number1 - number2 lt 6>
"*" : ${number1 * number2}
<#else>
"/" : ${number1 / number2}
</#if>
内建函数:
<#assign data = "abcd">
第一个字母大写:${data?cap_first}
所有字母小写:${data?lower_case}
所有字母大写:${data?upper_case}
html:对字符串进行HTML编码
trim:去掉字符串前后的空白字符
<#assign floatData = 12.34>
数值取整数:${floatData?int}
获取集合的长度:${users?size}
时间格式化:${dateTime?string("yyyy-MM-dd")}
空判断和对象集合:
! 指定缺失变量的默认值;一般配置变量输出使用
?? 判断变量是否存在。一般配合if使用 <#if value??></#if>
<#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/>
noparse指令:
指定FreeMarker不处理该指定里包含的内容
<#noparse>…</#noparse>
Springboot + Freemarker 集成配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
Freemarker 页面目录配置
spring:
mvc:
view:
prefix: /templates/
suffix: .ftl
以上是关于Apache FreeMarker的主要内容,如果未能解决你的问题,请参考以下文章