java工程,加入freemarker的jar包,项目目录下新建一个templates文件夹用来存放模板文件
a.ftl
你好,${user}~
**********************************************
<#if user = "lixin">hahaha</#if>
**********************************************
<#if user = "李鑫">
是好人
<#else>
是坏人
</#if>
**********************************************
<#list lst as address>
<b>${address}</b></br>
<b>${address.city}</b></br>
</#list>
**********************************************
<#include "include.txt">
**********************************************
自定义指令(macro指令)相当于方法
定义宏:
<#macro m1> <#--定义指令m1-->
<b>ooooooooo</b>
</#macro>
调用宏:
<@m1/>
**********************************************
定义带参数的宏指令:
<#macro m2 a b c >
${a}--${b}--${c}
</#macro>
调用带参数的宏:
<@m2 "haha" "heihei" "baibai"/>
**********************************************
nested指令(外部传进来的数据 获取@border中的参数)
<#macro border>
<table border=4 cellspacing=0 cellpadding=4>
<tr>
<td>
<#nested>
</td>
</tr>
</table>
</#macro>
调用:
<@border>
hahahahahahahahahahah
</@border>
**********************************************
<#macro border1 user>
<table border=4 cellspacing=0 cellpadding=4>
<tr>
<td>
${user}
</td>
</tr>
</table>
</#macro>
调用:
<@border1 "${user}"/>
**********************************************
assign定义一个变量(类似于c标签的定义)
<#assign mail = "网址">
**********************************************
测试namespace in 直接改变引用
**********************************************
在a文件中引入b文件 从而可以使用b文件中定义的宏和变量
测试命名空间:
<#import "b.ftl" as bb />
<@bb.copyright date="19950919" />
${bb.phonenum}
<#assign phonenum = "15080176683" />
${phonenum}
测试namespace in 直接改变引用中的变量值
<#assign phonenum="15080176684" in bb />
**********************************************
展示时间
${date?string("yyyy-MM-dd HH:mm:ss")}
**********************************************
javabean的处理和EL表达式一致
**********************************************
内建函数
${htm2?html}
**********************************************
测试空值处理:
<#--${sss} 没有定义变量 会报异常-->
${sss!} <#--没有定义变量 默认值是空字符串-->
${sss!"lixin"} <#--没有定义这个变量 默认值是字符串lixin-->
**********************************************
?? 运算符返回布尔值
<#if user??>
welcome ${user}!
</#if>
b.htl
<#macro copyright date>
<p>copyright ${date} b.ftl</p>
</#macro>
<#assign phonenum = "15080176682">
测试类
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 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", "李鑫");
List list = new ArrayList();
list.add(new Address("辽宁","沈阳"));
list.add(new Address("福建","厦门"));
System.out.println(list);
root.put("lst", list);
root.put("date", new Date());
root.put("htm2", "<b>粗体</b>");
//加载模板文件
Template t1 = cfg.getTemplate("a.ftl","utf-8");//用不设置编码的方法可能会出现乱码问题
//显示生成的数据,//将合并后的数据打印到控制台
Writer out = new OutputStreamWriter(System.out);
t1.process(root, out);
out.flush();
//显示生成的数据,//将合并后的数据直接返回成字符串!
// StringWriter out = new StringWriter();
// t1.process(root, out);
// out.flush();
// String temp = out.toString();
// System.out.println(temp); }
}
}