• Freemarker入门案例


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

    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();
                }
            }
        }
    }
  • 相关阅读:
    每日英语:Easing Gaokao Restrictions: a New Year's Gift?
    每日英语:Targeting Grandpa: China’s Seniors Hunger for Ads
    每日英语:Eight Questions: Bianca Bosker on China's 'Original Copies' in Architecture
    每日英语:There's No Avoiding Google+
    如何删除控制面板中没有"删除"菜单的程序
    html中利用javascript实现文本框字数的动态计算
    一条批处理语句ping局域网内的所有机器
    javascript中的"+"运算
    在asp.net中使用分帧页面时,ajax control报access denied错误的解决方法
    gridview和repeater中取得行的序号
  • 原文地址:https://www.cnblogs.com/linjiqin/p/3387972.html
Copyright © 2020-2023  润新知