• 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
    
  • 相关阅读:
    正则表达式与领域特定语言(DSL)
    css兼容性问题的整理
    ASP.NET Web API 2.0新特性:Attribute Routing1
    架构讨论
    用Jekyll在github上写博客
    日历插件(beta)
    SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
    Maven中有三大模块
    hdu 2444
    4.4 从一个表向另外的表中复制行
  • 原文地址:https://www.cnblogs.com/loveer/p/12235903.html
Copyright © 2020-2023  润新知