zoukankan      html  css  js  c++  java
  • 【转】FreeMarker学习笔记

    出自:CSDN博客 - alingluo  http://blog.csdn.net/luowangcan/article/details/71404205

    如有侵权立删

    一,介绍

    以下内容来自:http://www.oschina.net/p/freemarker

    FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。

    FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。

    虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,简单来讲就是模板加数据模型,然后输出页面(如下图)

    这里写图片描述

    FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

    FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

    FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

    FreeMarker是免费的

    而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的 Eclipse 编辑插件是 JBoss Tools。

    在Maven中使用它:

    1 <dependency>
    2 <groupId>freemarker</groupId>
    3 <artifactId>freemarker</artifactId>
    4 <version>2.3.9</version>
    5 </dependency>

    表示不知道怎么把jar上传到MarkDown编辑器,留个网址下吧。下载地址:http://freemarker.sourceforge.net/freemarkerdownload.html (注:官方网站.org的经常打不开)

    二,使用环境搭建

    • 创建一个Java项目,这里名为freemarker,在根目录下创建一个名为ftl的文件夹(PS:用来存放freemarker模板),jar啥的就不说了。

    • 创建一个FreeMarkerDemo类,用来生成模板以及处理模板与数据之间的关系并输出:

     1         //第一步:实例化Freemarker的配置类
     2         Configuration conf = new Configuration();
     3         //第二步:给配置类设置路径
     4         String dir = "D:\java21\freemarker\ftl\";
     5 
     6         conf.setDirectoryForTemplateLoading(new File(dir));
     7 
     8         Template template = conf.getTemplate("freemarker.html");
     9 
    10         //第三步:处理模板及数据之间将数据与模板合成一个HTML
    11         //第四步:输出html
    12         Writer out = new FileWriter(new File(dir+"hello.html"));    

    定义一个Person对象:

     1 public class Person {
     2     private String id;
     3     private String name;
     4 
     5     public String getId() {
     6         return id;
     7     }
     8 
     9     public void setId(String id) {
    10         this.id = id;
    11     }
    12 
    13     public String getName() {
    14         return name;
    15     }
    16 
    17     public void setName(String name) {
    18         this.name = name;
    19     }
    20 
    21 }

    对象输出例子

    定义数据

    1        //定义数据
    2         Map<String,Object> root = new HashMap<String,Object>();
    3         Person p = new Person();
    4         p.setId("111");
    5         p.setName("哈哈哈");
    6         root.put("person", p);
    7         template.process(root, out);
    8         out.flush();
    9         out.close();

    模板页面书写

    1 ${person.id}<br /> ${person.name}

    点击hello.html查看结果

    遍历List例子

    定义数据

    1         //遍历List
    2         List<String> persons = new ArrayList<String>();
    3         persons.add("阿灵罗");
    4         persons.add("罗零");
    5         persons.add("灵罗");
    6         root.put("persons",persons);
    7         template.process(root, out);
    8         out.flush();
    9         out.close();

    模板页面书写:

    1 <#list persons as person> ${person} </#list>
    2 
    3 <!--获取当前索引  -->
    4 <#list persons as p> ${p_index} </#list>

    遍历Map

    定义数据:

    1         //遍历Map
    2         Map<String,String> mx = new HashMap<String,String>();
    3         mx.put("alingluo", "阿灵罗");
    4         mx.put("lling", "罗零");
    5         root.put("mx", mx);
    6         template.process(root, out);
    7         out.flush();
    8         out.close();

    模板页面书写:

    1 <!--Map写法  -->
    2     ${mx.alingluo}/${mx.lling} <#list mx?keys as k> ${mx[k]} </#list>

    ListMap遍历

    定义数据

     1 //遍历List<Map>
     2         List<Map<String,String>> maps = new ArrayList<Map<String,String>>();
     3         Map<String,String> pms1 = new HashMap<String,String>();
     4         pms1.put("id1", "张三");
     5         pms1.put("id2", "李四");
     6         Map<String,String> pms2 = new HashMap<String,String>();
     7         pms2.put("id1", "张三");
     8         pms2.put("id2", "李四");
     9         maps.add(pms1);
    10         maps.add(pms2);
    11         root.put("maps", maps);
    12         template.process(root, out);
    13         out.flush();
    14         out.close();

    模板页面书写:

    1 <#list maps as m> ${m.id1}/${m.id2} </#list> <#list maps as m> <#list
    2     m?keys as k> ${m[k]} </#list> </#list>

    在模板中赋值

    1 root.put("world", "世界你好");
     1 <!-- 在模板中赋值 -->
     2     1:<#assign x=0 /> ${x} 
     3     2:<#assign x="${world}" /> ${x} 
     4     3:<#assign x>世界太好了</#assign> ${x}
     5     4:<#assign x>
     6        <#list ["星期一", "星期二", "星期三",
     7          "星期四", "星期五", "星期六", "星期天"] as n> ${n} 
     8        </#list> 
     9      </#assign>
    10       ${x}
    
    

    生成页面对应的值: 
    这里写图片描述

    判断

     1  <!-- 判断 -->
     2   <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
     3       <#if n != "星期一">
     4          ${n}
     5       </#if>
     6    </#list>
     7 
     8    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
     9       <#if n_index != 0>
    10       ${n}
    11     </#if>
    12    </#list>
    13 
    14    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
    15        <#if (n_index == 1) || (n_index == 3)>
    16           ${n}
    17        </#if>
    18     </#list>
    19 
    20    <!-- else -->
    21    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
    22          <#if (n_index == 1) || (n_index == 3)>
    23              ${n} --红色
    24          <#else>
    25             ${n} --绿色
    26          </#if>
    27      </#list>

    生成页面效果

    这里写图片描述

    时间格式

    模板页面效果如下:

    1  <!--时间格式  -->
    2    1:${cur_time?date}
    3    2:${cur_time?datetime}
    4    3:${cur_time?time}

    生成页面效果如下:

    这里写图片描述

    FreeMarkerDemo全部代码:

    public class FreeMarkerDemo {
        public static void main(String[] args) throws IOException, TemplateException {
            //第一步:实例化Freemarker的配置类
            Configuration conf = new Configuration();
            //第二步:给配置类设置路径
            String dir = "D:\java21\freemarker\ftl\";
    
            conf.setDirectoryForTemplateLoading(new File(dir));
    
            Template template = conf.getTemplate("freemarker.html");
    
            //第三步:处理模板及数据之间将数据与模板合成一个HTML
            //第四步:输出html
            Writer out = new FileWriter(new File(dir+"hello.html"));
            //定义数据
        //  Map root = new HashMap();
    
            //执行生成
    
    
            //定义数据
            Map<String,Object> root = new HashMap<String,Object>();
            Person p = new Person();
            p.setId("111");
            p.setName("哈哈哈");
            root.put("person", p);
            root.put("world", "世界你好");
            //遍历List
            List<String> persons = new ArrayList<String>();
            persons.add("阿灵罗");
            persons.add("罗零");
            persons.add("灵罗");
            root.put("persons",persons);
    
            root.put("cur_time", new Date());
            //遍历Map
            Map<String,String> mx = new HashMap<String,String>();
            mx.put("alingluo", "阿灵罗");
            mx.put("lling", "罗零");
            root.put("mx", mx);
    
    
    
    
            //遍历List<Map>
            List<Map<String,String>> maps = new ArrayList<Map<String,String>>();
            Map<String,String> pms1 = new HashMap<String,String>();
            pms1.put("id1", "张三");
            pms1.put("id2", "李四");
            Map<String,String> pms2 = new HashMap<String,String>();
            pms2.put("id1", "张三");
            pms2.put("id2", "李四");
            maps.add(pms1);
            maps.add(pms2);
            root.put("maps", maps);
    
            //定义数据
            root.put("val", null);
    
    
            template.process(root, out);
            out.flush();
            out.close();
        }
    }

    freemarker.html全部代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    
        ${person.id}
        <br /> ${person.name} <#list persons as person> ${person} </#list>
    
        <!--Map写法  -->
        ${mx.alingluo}/${mx.lling} <#list mx?keys as k> ${mx[k]} </#list>
    
        <!--List<Map>写法  -->
        <#list maps as m> ${m.id1}/${m.id2} </#list> <#list maps as m> <#list
        m?keys as k> ${m[k]} </#list> </#list>
    
        <!--获取当前索引  -->
        <#list persons as p> ${p_index} </#list>
    
        <!-- 在模板中赋值 -->
        1:<#assign x=0 /> ${x} 
        2:<#assign x="${world}" /> ${x} 
        3:<#assign x>世界太好了</#assign> ${x}
        4:<#assign x>
           <#list ["星期一", "星期二", "星期三",
             "星期四", "星期五", "星期六", "星期天"] as n> ${n} 
           </#list> 
         </#assign>
          ${x}
    
       <!-- 判断 -->
      <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
          <#if n != "星期一">
             ${n}
          </#if>
       </#list>
    
       <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
          <#if n_index != 0>
          ${n}
        </#if>
       </#list>
    
       <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
           <#if (n_index == 1) || (n_index == 3)>
              ${n}
           </#if>
        </#list>
    
       <!-- else -->
       <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
             <#if (n_index == 1) || (n_index == 3)>
                 ${n} --红色
             <#else>
                ${n} --绿色
             </#if>
         </#list>
       <!--时间格式  -->
       1:${cur_time?date}
       2:${cur_time?datetime}
       3:${cur_time?time}
       <!-- null -->
       ${val!}
    
       <!-- 宏定义 -->
       1:
        <#macro table u>
            ${u} 
            </#macro>
        <@table u=8 />
        2:
        <#macro table u>
            ${u}
        <#nested/>
        </#macro>
        <@table u=8 >这是8</@table>
    
    </body>
    </html>

    生成的HTML页面内容如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    
        111
        <br /> 哈哈哈  阿灵罗  罗零  灵罗 
    
        <!--Map写法  -->
        阿灵罗/罗零  阿灵罗  罗零 
    
        <!--List<Map>写法  -->
         张三/李四  张三/李四    李四  张三    李四  张三  
    
        <!--获取当前索引  -->
         0  1  2 
    
        <!-- 在模板中赋值 -->
        1: 0 
        2: 世界你好 
        3: 世界太好了
        4:    
     星期一 
     星期二 
     星期三 
     星期四 
     星期五 
     星期六 
     星期天 
    
    
       <!-- 判断 -->
             星期二
             星期三
             星期四
             星期五
             星期六
             星期天
    
          星期二
          星期三
          星期四
          星期五
          星期六
          星期天
    
              星期二
              星期四
    
       <!-- else -->
                星期一 --绿色
                 星期二 --红色
                星期三 --绿色
                 星期四 --红色
                星期五 --绿色
                星期六 --绿色
                星期天 --绿色
       <!--时间格式  -->
       1:2017-5-8
       2:2017-5-8 10:56:56
       3:10:56:56
       <!-- null -->
    
    
       <!-- 宏定义 -->
       1:
            8 
        2:
                8
    这是8
    
    </body>
    </html>

    这是一些FreeMarker的基础知识,希望会有用

    版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    修改Matlab的背景颜色
    lane车道连接规则
    用汇编语言输出Hello World!
    运用ISAPI_Rewrite将asp静态化应注意路径
    广州,佛山>黄岐生活资讯网生活信息发布
    最近使用网络电话,还比较便宜
    小心中中国移动“短号集群网”的招
    正规表达式的一些知识
    ubuntu 8.04下安装和使用systemtap
    应用程序框架设计之二:分层和层间数据传递(上)
  • 原文地址:https://www.cnblogs.com/shizilunya/p/8432962.html
Copyright © 2011-2022 走看看