标签:
FreeMarker基础简介
FreeMarker是一款模板引擎:一种基于模板,用来生成输出文本的通用工具。它是为java程序员提供的一个开发包或者说是库类,一般的用法就是Java程序通过SQL查询到数据,FreeMarker使用模板生成文件页面来显示已经准备好的数据。也就是 输出= 模板+数据模型。
FreeMarker支持的数据类型有:
标量
容器
子程序
其他
模板(FTL编程)是由如下部分混合而成的:
常用操作,这里只列举不同于其他编程语言的:
默认值:value!"testValue"
这里如果value没有值就会把testValue这个默认值给他
检测不存在的值:hasValue??
结果是true或false。
我们也可以自定义指令,自定义指令可以使用macro指令来定义。比如:
定义宏
<#macro welcome>
<h1>Hello world!</h1>
</#macro>
宏调用:
<@welcome></@welcome> 或者 <@welcome/>
输出结果:
<h1>Hello world!</h1>
也可以定义带有参数的宏
定义宏
<#macro welcome person>
<h1>Hello world! Hello ${person}!</h1>
</#macro>
宏调用:
<@welcome person="YEN"></@welcome> 或者 <@welcome person="YEN"/>
输出结果:
<h1>Hello world! Hello YEN!</h1>
如果需要多个参数则采用下列形式
<#macro 宏名 参数1名称 参数2名称 参数3名称>
处理
</#macro>
eg:
<#macro Welcome name sex age>
<h1>Hello,${name}-${sex}-${age}</h1>
</#macro>
调用宏时:
<@#Welcome name="YEN" sex="男" age="20"/>
自定义指令可以嵌套内容 <#nested>
定义
<#macro testNested>
<ul>
<li>
<#nested>
</li>
<ul>
</#macro>
调用
<@testNested>this is test Nested!</@testNested>
输出:
<ul>
<li>
this is test Nested!
</li>
<ul>
嵌套的内容可以被多次调用:
定义
<#macro testNested>
<ul>
<li>
<#nested>
<#nested>
<#nested>
</li>
<ul>
</#macro>
调用
<@testNested>this is test Nested!</@testNested>
输出:
<ul>
<li>
this is test Nested!
this is test Nested!
this is test Nested!
</li>
<ul>
宏和循环变量
<#macro doCount>
<#nested 1>
<#nested 2>
<#nested 3>
</#macro>
<@doCount; x>
${x} test.
</@doCount>
1 test.
2 test.
3 test.
FreeMarker程序开发
首先自然要导入FreeMarker程序的jar包
一个FreeMarker需要如下步骤:
package com.test.freemarker;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FtlTest {
public static void main(String[] args) throws Exception {
//创建Freemarker配置实例
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("templates"));
//创建数据模型
Map map = new HashMap();
map.put("username", "YEN");
//加载模板文件
Template t1 = cfg.getTemplate("test.ftl");
//显示生成的数据
Writer out = new OutputStreamWriter(System.out);
t1.process(map, out);
out.flush();
}
}
标签:
原文地址:http://blog.csdn.net/yen_csdn/article/details/52266499