Apache FreeMarker

欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot

基本语法

${…}:
	称为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
posted @ 2020-01-27 14:00  LittleDonkey  阅读(378)  评论(0)    收藏  举报