package com.sxt.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 Test1 {
public static void main(String[] args) throws Exception {
//创建Freemarker配置实例
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("templates")); //创建数据模型
Map<String, Object> root = new HashMap<String, Object>();
root.put("user", "测试用户"); //javabean可以自动转化!类似于我们前面学习的EL表达式!
User u = new User();
u.setUname("小红");
root.put("user1", u);
User u2 = new User("小明",new Address("中国","北京"));
root.put("user2", u2); //map/list容器
List<Address> list = new ArrayList<Address>();
list.add(new Address("中国","北京"));
list.add(new Address("中国","上海"));
list.add(new Address("美国","纽约"));
root.put("lst", list); //普通标量??
root.put("num0", );
root.put("b2", true);
root.put("date1", new Date());
root.put("random", new Random().nextInt());
root.put("htm2", "<b>粗体</b>"); //加载模板文件
Template t1 = cfg.getTemplate("a.ftl"); //显示生成的数据
Writer out = new OutputStreamWriter(System.out);
t1.process(root, out);
out.flush(); }
}
2./templates/a.ftl
普通标量测试:
<#if num0==18>18岁,成年了!</#if><#--数字 -->
<#if user=="测试用户">欢迎你</#if><#--字符串-->
<#if b2>b2是true!</#if> <#--布尔值-->
${date1?string("yyyy-MM-dd HH:mm:ss")}
<#-- ${date1.toString()}????时间怎么处理?? -->
-----------------------------------------------
普通变量和javabean测试:
你好啊,${user},${user1.uname},今天你的精神不错!
${user2.uname}来自${user2.addr.city},那里好玩吗?
-----------------------------------------------
List数据测试:
${lst[].city},
${lst[].city},
${lst[].city},
------------------------------------------------
内建函数:
${htm2?html}
-------------------------------------------------
测试空值处理:
<#-- ${sss} 没有定义这个变量,会报异常! -->
${sss!} <#--没有定义这个变量,默认值是空字符串! -->
${sss!"abc"} <#--没有定义这个变量,默认值是字符串abc! -->
------------------------------------------------
if语句测试:
${user}是<#if user=="老师">我们的老师</#if>
------------------------------------------------
if else 语句测试:
<#if num0 gt 18> <#--不是使用>,大部分时候,freemarker会把>解释成标签结束! -->
及格!
<#else>
不及格!
</#if>
---------------------------------------------------
if else if else语句测试:
<#if random gte 90>
优秀!
<#elseif random gte >
良好!
<#else>
一般!
</#if>
----------------------------------------------------
测试list指令:
<#list lst as dizhi >
<b>dizhi</b> <br/>
</#list>
----------------------------------------------------
测试include指令:
<#include "included.txt" />
----------------------------------------------------
<#macro m1> <#--定义指令m1 -->
<b>aaabbbccc</b>
<b>dddeeefff</b>
</#macro> <@m1 /><@m1 /> <#--调用上面的宏指令 -->
------------------------------------------------------
<#macro m2 a b c >
${a}--${b}--${c}
</#macro>
<@m2 a="测试1" b="测试2" c="测试3" />
----------------------------------------------------
<#macro border>
<table border= cellspacing= cellpadding=><tr><td>
<#nested>
</td></tr></table>
</#macro>
<@border >表格中的内容!</@border>
-------------------------------------------------------
测试命名空间:
<#import "b.ftl" as bb />
<@bb.copyright date="2010-2011" />
${bb.mail}
<#assign mail="my@163.com" />
${mail}
<#assign mail="my@163.com" in bb />
${bb.mail}