freemarker入门
添加头文件freemarker.jar
package com.sxt.test.freemarker; public class Address { private String country; private String city; public Address() { } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public Address(String country, String city) { super(); this.country = country; this.city = city; } }
package com.sxt.test.freemarker; public class User { private String uname; private Address addr; public User() { } public Address getAddr() { return addr; } public void setAddr(Address addr) { this.addr = addr; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public User(String uname, Address addr) { super(); this.uname = uname; this.addr = addr; } }
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 root = new HashMap(); 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 list = new ArrayList(); 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(); } }
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="老高" b="老张" c="老马" /> ---------------------------------------------------- <#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}
templates\b.ftl
<#macro copyright date>
<p>Copyright (C) ${date} 北京尚学堂.</p>
</#macro>
<#assign mail = "bjsxt@163.com">
templates\included.txt
我是被包含的文件!
结果:
普通标量测试:
18岁,成年了!
欢迎你
b2是true!
2018-05-09 09:14:14
-----------------------------------------------
普通变量和javabean测试:
你好啊,老高,老马,今天你的精神不错!
老张来自北京,那里好玩吗?
-----------------------------------------------
List数据测试:
北京,
上海,
纽约,
------------------------------------------------
内建函数:
<b>粗体</b>
-------------------------------------------------
测试空值处理:
abc
------------------------------------------------
if语句测试:
老高是我们的老师
------------------------------------------------
if else 语句测试:
不及格!
---------------------------------------------------
if else if else语句测试:
一般!
----------------------------------------------------
测试list指令:
<b>dizhi</b> <br/>
<b>dizhi</b> <br/>
<b>dizhi</b> <br/>
----------------------------------------------------
测试include指令:
我是被包含的文件!----------------------------------------------------
<b>aaabbbccc</b>
<b>dddeeefff</b>
<b>aaabbbccc</b>
<b>dddeeefff</b>
------------------------------------------------------
老高--老张--老马
----------------------------------------------------
<table border=4 cellspacing=0 cellpadding=4><tr><td>
表格中的内容! </td></tr></table>
-------------------------------------------------------
测试命名空间:
<p>Copyright (C) 2010-2011 北京尚学堂.</p>
bjsxt@163.com
my@163.com
my@163.com

浙公网安备 33010602011771号