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数据测试:
北京,
上海,
纽约,
------------------------------------------------
内建函数:
&lt;b&gt;粗体&lt;/b&gt;
-------------------------------------------------
测试空值处理:

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

 

posted @ 2018-05-09 10:21  牧 天  阅读(131)  评论(0)    收藏  举报