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", 18); root.put("b2", true); root.put("date1", new Date()); root.put("random", new Random().nextInt(100)); 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[0].city}, ${lst[1].city}, ${lst[2].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 80> 良好! <#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=4 cellspacing=0 cellpadding=4><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}