Freemarker入门案例

首先需要到freemarker官方下载freemarker的jar包,导入到项目中,如:freemarker-2.3.19.jar

Freemarker入门案例

1、先建个freemarker的工具类,FreemarkerUtil.java

package com.ljq.fm;



import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Map;



import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;



public class FreemarkerUtil {



    public Template getTemplate(String name) {

        try {

            // 通过Freemaker的Configuration读取相应的ftl

            Configuration cfg = new Configuration();

            // 设定去哪里读取相应的ftl模板文件

            cfg.setClassForTemplateLoading(this.getClass(), "/ftl");

            // 在模板文件目录中找到名称为name的文件

            Template temp = cfg.getTemplate(name);

            return temp;

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }



    /**

     * 控制台输出

     * 

     * @param name

     * @param root

     */

    public void print(String name, Map<String, Object> root) {

        try {

            // 通过Template可以将模板文件输出到相应的流

            Template temp = this.getTemplate(name);

            temp.process(root, new PrintWriter(System.out));

        } catch (TemplateException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }



    /**

     * 输出HTML文件

     * 

     * @param name

     * @param root

     * @param outFile

     */

    public void fprint(String name, Map<String, Object> root, String outFile) {

        FileWriter out = null;

        try {

            // 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径

            out = new FileWriter(new File("E:/workspace/freemarkprj/page/" + outFile));

            Template temp = this.getTemplate(name);

            temp.process(root, out);

        } catch (IOException e) {

            e.printStackTrace();

        } catch (TemplateException e) {

            e.printStackTrace();

        } finally {

            try {

                if (out != null)

                    out.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}

2 、在src目录下建个ftl包,用于存放ftl模板文件,this.getClass() 就是根据当前类的路径获取模板文件位置
01.ftl

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>测试</title>

</head>



<body>

<h1>你好${username}</h1>

</body>

</html>

02.ftl

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>



<body>

<h1>你好: ${username}</h1>

</body>

</html>

03.ftl

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1>${user.id}-----${user.name}-----${user.age}</h1>

<#if user.age lt 12>

    ${user.name}还是一个小孩

<#elseif user.age lt 18>

    ${user.name}快成年

<#else>

    ${user.name}已经成年

</#if>

</body>

</html>

04.ftl

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<#list users as user>

${user.id}---------${user.name}-------${user.age}<br/>

</#list>

</body>

</html>

05.ftl

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>



<body>

<hr/>

<#list users as user>

${user.id}---------${user.name}-------${user.age}<br/>

</#list>

</body>

</html>

06.ftl

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>



<body>

${user.id}-------${user.name}------${user.group!}  <#-- !后为空就不输出  -->

<#--${user.group.name!}--><#-- 按照以上的方式加! freemarker仅仅只会判断group.name是不是空值 -->

${(user.group.name)!"1234"} 



${(a.b)!"没有a.b元素"}



<#--

!:指定缺失变量的默认值 

??:判断某个变量是否存在,返回boolean值 

-->

<#if (a.b)??> <#--if后不用加$-->

    不为空

<#else>

    为空

</#if>

</body>

</html>

实体类User.java

package com.ljq.fm;



import java.io.Serializable;



@SuppressWarnings("serial")

public class User implements Serializable {

    private int id;

    private String name;

    private int age;

    private Group group;



    public Group getGroup() {

        return group;

    }



    public void setGroup(Group group) {

        this.group = group;

    }



    public User() {

    }



    public User(int id, String name, int age) {

        this.id = id;

        this.name = name;

        this.age = age;

    }



    public int getId() {

        return id;

    }



    public void setId(int id) {

        this.id = id;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public int getAge() {

        return age;

    }



    public void setAge(int age) {

        this.age = age;

    }



}

实体类Group.java

package com.ljq.fm;



/**

 * 

 * 

 * @author 林计钦

 * @version 1.0 2013-10-25 下午02:36:09

 */

public class Group {

    private String name;



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



}

3、再建个Junit的测试类 FreemarkerTest.java

package com.ljq.fm;



import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Map;



import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;



public class FreemarkerUtil {



    public Template getTemplate(String name) {

        try {

            // 通过Freemaker的Configuration读取相应的ftl

            Configuration cfg = new Configuration();

            // 设定去哪里读取相应的ftl模板文件

            cfg.setClassForTemplateLoading(this.getClass(), "/ftl");

            // 在模板文件目录中找到名称为name的文件

            Template temp = cfg.getTemplate(name);

            return temp;

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }



    /**

     * 控制台输出

     * 

     * @param name

     * @param root

     */

    public void print(String name, Map<String, Object> root) {

        try {

            // 通过Template可以将模板文件输出到相应的流

            Template temp = this.getTemplate(name);

            temp.process(root, new PrintWriter(System.out));

        } catch (TemplateException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }



    /**

     * 输出HTML文件

     * 

     * @param name

     * @param root

     * @param outFile

     */

    public void fprint(String name, Map<String, Object> root, String outFile) {

        FileWriter out = null;

        try {

            // 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径

            out = new FileWriter(new File("E:/workspace/freemarkprj/page/" + outFile));

            Template temp = this.getTemplate(name);

            temp.process(root, out);

        } catch (IOException e) {

            e.printStackTrace();

        } catch (TemplateException e) {

            e.printStackTrace();

        } finally {

            try {

                if (out != null)

                    out.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}

 

你可能感兴趣的:(freemarker)