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>

注意文件路径需要使用引号括起来。


版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(freemarker,宏,macro,auto_import)