前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习Freemarker-基本使用

快速学习Freemarker-基本使用

作者头像
cwl_java
发布2020-02-11 13:58:37
9020
发布2020-02-11 13:58:37
举报
文章被收录于专栏:cwl_Javacwl_Java

2.3 Freemarker的基本使用

2.3.1 构造环境

创建maven工程codeutil,并引入响应坐标

代码语言:javascript
复制
    <dependencies>
        <!--freemarker核心包 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
   </dependencies>

2.3.2 入门案例

(1)创建模板template.ftl

代码语言:javascript
复制
欢迎您:${username}

(2)使用freemarker完成操作

代码语言:javascript
复制
public class FreemarkTest01 {
    @Test
    public void testProcessTemplate() throws Exception {
        //1.创建freeMarker配置实例
        Configuration cfg = new Configuration();
        //2.设置模板加载器:开始加载模板,并且把模板加载在缓存中
        cfg.setTemplateLoader(new FileTemplateLoader(new File("templates")));
        //3.创建数据模型
        Map<String, Object> dataModel = new HashMap<>();
        dataModel.put("username", "张三");
        //4.获取模板
        Template template = cfg.getTemplate("temp01.ftl");
        //
        /**
         * 5.处理模板内容(i.输出到文件)
         * process:
         * 参数一:数据模型(map集合)
         * 参数二:Writer对象(文件,控制台)
         */
        //i.输出到文件
        //template.process(dataModel, new FileWriter(new 
        File("C:\\Users\\ThinkPad\\Desktop\\ihrm\\day12\\测试\\aa.text")));
        //i.打印到控制台
        template.process(dataModel, new PrintWriter(System.out));//在控制台输出内容
    }
}

2.3.3 字符串模板

代码语言:javascript
复制
public class FreemarkTest02 {
    
    private Configuration conf;
    @Before
    public void init() {
        conf = new Configuration();
    }
    @Test
    public void testProcessTemplateString() throws Exception {
        String templateString = "欢迎您:${username}";
        Map<String,Object> dataMap = new HashMap();
        dataMap.put("username","张三");
        StringWriter out = new StringWriter();
        /**
         * 自定义模板
         * 1.模板名称
         * 2.模板的正文内容
         * 3.configuration对象
         */
        Template template = new Template("templateString...",new StringReader(templateString),conf);
        //处理模板内容
        template.process(dataMap, out);
        System.out.println(out.toString());
    }
}

2.4 Freemarker模板

2.4.1 概述

FreeMarker模板文件主要有5个部分组成:

  1. 数据模型:模板能用的所有数据
  2. 文本,直接输出的部分
  3. 注释,即<#–…-->格式不会输出
  4. 插值(Interpolation):即${…}或者#{…}格式的部分,将使用数据模型中的部分替代输出
  5. FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。

2.4.2 数据模型

FreeMarker(还有模板开发者)并不关心数据是如何计算的,FreeMarker 只是知道真实的数据是什么。模板能用的所有数据被包装成 data-model 数据模型

在这里插入图片描述
在这里插入图片描述

2.4.3 模板的常用标签

在FreeMarker模板中可以包括下面几个特定部分:

  1. ${…}:称为interpolations,FreeMarker会在输出时用实际值进行替代。 ${name}可以取得root中key为name的value。 ${person.name}可以取得成员变量为person的name属性
  2. <#…>:FTL标记(FreeMarker模板语言标记):类似于HTML标记,为了与HTML标记区分
  3. <@>:宏,自定义标签
  4. 注释:包含在<#–和-->(而不是)之间

2.4.4 模板的常用指令

  1. if指令 分支控制语句
代码语言:javascript
复制
	  <#if condition>
     ....
      <#elseif condition2>
     ...
      <#elseif condition3>      
     ...
      <#else>
     ...`在这里插入代码片`
      </#if>
  1. list、break指令 list指令时一个典型的迭代输出指令,用于迭代输出数据模型中的集合
代码语言:javascript
复制
 <#list sequence as item>
         ...
       </#list>
   除此之外,迭代集合对象时,还包括两个特殊的循环变量:
       a、item_index:当前变量的索引值。
       b、item_has_next:是否存在下一个对象
       也可以使用<#break>指令跳出迭代
        <#list ["星期一","星期二","星期三","星期四","星期五"] as x>
           ${x_index +1}.${x} <#if x_has_next>,</#if>
            <#if x = "星期四"><#break></#if>
        </#list>
  1. include 指令 include指令的作用类似于JSP的包含指令,用于包含指定页,include指令的语法格式如下
代码语言:javascript
复制
   <#include filename [options]></#include>
           在上面的语法格式中,两个参数的解释如下
           a、filename:该参数指定被包含的模板文件
           b、options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,encoding 
  指定包含页面时所使用的解码集,而parse指定被
           包含是否作为FTL文件来解析。如果省略了parse选项值,则该选项值默认是true
  1. assign指令 它用于为该模板页面创建或替换一个顶层变量
代码语言:javascript
复制
<#assign name = zhangsan />
  1. 内置函数 FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可通过内建函数来转换输出变量。下面是常用的内建的字符串函数:
代码语言:javascript
复制
 ?html:html字符转义
  
         ?cap_first: 字符串的第一个字母变为大写形式
  
         ?lower_case :字符串的小写形式
  
         ?upper_case :字符串的大写形式
  
         ?trim:去掉字符串首尾的空格
  
         ?substring:截字符串
  
         ?lenth: 取长度
  
         ?size: 序列中元素的个数
  
         ?int : 数字的整数部分(比如- 1.9?int 就是- 1)
           ?replace:字符串替换
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.3 Freemarker的基本使用
    • 2.3.1 构造环境
      • 2.3.2 入门案例
        • 2.3.3 字符串模板
        • 2.4 Freemarker模板
          • 2.4.1 概述
            • 2.4.2 数据模型
              • 2.4.3 模板的常用标签
                • 2.4.4 模板的常用指令
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档