freemarker宏的應用

使用freemarker通常要把一些常用的html代碼段封裝成一個整體使用,這裏就用到了freemarker的宏(macro)。


首先編寫存放macro代碼的模板文件,命名爲function.ftl:

<#-- 
 # 展示數據字典組成的下拉列表
 # @param data 		數據集合
 # @param optionVal 選項value屬性字段名,默認爲id
 # @param optionTxt	選項文本屬性字段名,默認爲name
 # @param name		下拉列表name值
 # @param value		下拉列表value值
 # @param nullable	決定下拉列表是否提供空選項,默認true
 # @param nullVal	下拉列表空選項的取值,默認爲空字符串
 # @param nullTxt	下拉列表空選項的文本,默認爲空字符串
 # @param classList	下拉列表class值
 # @param style		下拉列表節點樣式
 # @param disabled	設置下拉列表爲禁用
 #-->
<#macro select data=[] optionVal="id" optionTxt="name" name="" id="" value="" nullable=true nullVal="" nullTxt="" classList="" style="" disabled=false>
	<select
		<#if name??>name="${name}" 
		<#if id??>id="${id}" 
		<#if classList??>class="${classList}"
		<#if style??>style="${style}"
		<#if disabled>disabled >
		
		<#if nullable><option value="${nullVal}">${nullTxt}</option> 
		<#list data as d>
			<#assign option_val = ("d." + optionVal)?eval
					 option_txt = ("d." + optionTxt)?eval>
			<option value="${option_val}" <#if option_val == value >selected>${option_txt}
    </select>
</#macro>

完成後需要將這個文件配置到freemarker.properties中:

auto_import=/WEB-INF/freemarker/function.ftl as fn

這樣function.ftl就會被自動加載,其中fn相當於命名空間。這裏要注意的是,上面的路徑其實受到freemarker設置的模板加載路徑參數所影響,注意路徑寫正確,否則會報文件不存在異常。

然後就是使用這個宏,可以在ftl文件中這樣使用已完成的宏:

<@fn.select data=data value="1" nullTxt="請選擇" optionVal="id" optionTxt="username" />

如果只是在少數地方使用這個宏,也可以不配置auto_import,在使用的地方通過import指令來引入,如下:

<#import "/WEB-INF/freemarker/function.ftl" as fn>

注意文件路徑需要使用引號括起來。


發佈了40 篇原創文章 · 獲贊 6 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章