Freemarker 常用的指令与内置函数

freemarker是比较好用的网页静态化技术 ,于是写了这个博客记录下学习它的常用指令和内置函数

下面是个入门小案例:

先准备一个模板,后缀是ftl结尾的格式

<html>
<head>
    <title>你好freemarker</title>
</head>
<body>
${name},欢迎您来到神奇的${message}世界
</body>
</html>

然后导包:

<dependency> 
  <groupId>org.freemarker</groupId> 
  <artifactId>freemarker</artifactId> 
  <version>2.3.23</version> 
</dependency> 

 然后编码:(注意:这里选择路径时最好选择全路径,不要选择相对路径)

        //1,创建配置对象
        Configuration configuration = new Configuration(Configuration.getVersion());
        //2,设置要加载的模板路径,必须是个"文件夹";
        configuration.setDirectoryForTemplateLoading(new File("F:\\freemarker-demo\\src\\main\\resources"));
        //3,设置编码字符集
        configuration.setDefaultEncoding("utf-8");
        //4,通过文件名获取模板对象
        Template template = configuration.getTemplate("html_template.ftl");
        //5,设置数据源,可以是map或者pojo,一般选择map,更灵活
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("name", "张三");
        map.put("message", "freemarker");

        //创建一个输出io流,设置写出文件路径
        Writer writer = new FileWriter("F:/javatest/test.html");
        //执行输出
        template.process(map,writer);
        //关流
        writer.close();

效果:   张三 , 欢迎您来到神奇的 freemarker 世界

(以下很多用的都是代码里面定义的变量..)

常用的 FTL指令
1, #assign 用于定义变量和定义一个json对象
<#assign linkman='李四'>
${linkman}
<#assign pojo={"name":"麻子","age":25,"sex":"男"}>
${pojo.name},,,${pojo.age},,,${pojo.sex}


2, #include  用于模板文件的嵌套,和html里面的include功能类似
<#include 'header.ftl'>

3, #if指令  用以判断,不同的是,它需要夹着使用,可配合#else指令一起使用
<#if success==true>
<#--ftl指令中 =和== 都是判断的意思-->
    成功!
<#else>
    失败!
</#if>


4, #list指令 表示遍历集合
要是想要获得循环中每个元素的索引则为$ {xxx_index}获取
<#list goodsList as goods>
   序号: ${goods_index+1} 名字: ${goods.name}  价格: ${goods.price}
</#list>


内置函数  语法格式: 变量+?+函数名称


1, 获取集合的长度
集合尺寸: ${goodsList?size}


2, 转换JSON字符串为js对象
<#assign pojo='{"name":"麻子","age":25,"sex":"男"}'/>
<#--意思是 申明另外一个变量data接收pojo调用eval方法生成的js对象-->
<#assign data=pojo?eval/>
${data.name},,,${data.age},,,${data.sex}

3,日期格式化

当前日期:${today?date} 
当前时间:${today?time}    
当前日期+时间:${today?datetime}          
日期格式化:  ${today?string("yyyy 年 MM 月")} 

结果效果:

当前日期:2018-11-20
当前时间:14:43:52
当前日期+时间:2018-11-20 14:43:52
日期格式化:  2018年11月

4,数字转化为字符串

<#assign number=123456789>
${number}

展示效果是: 123,456,789

当不需要中间的逗号时需要转化为字符串

${number?c}

展示效果是: 123456789

5, 空值处理运算符

判断某变量是否存在:“??” 

用法为:variable??,如果该变量存在,返回 true,否则返回 false 

<#if aaa??> 
  aaa 变量存在 
<#else> 
  aaa 变量不存在 
</#if> 

缺失变量默认值:“!” 

 ${aaa!"} 
这样表示当aaa为null时用''空字符串代替,防止变量缺失值时程序报错

6,算术运算符

这个和平时用的差不多一样,,就是注意一点,ftl语法中 = 和 == 都可用于逻辑判断

在大于小于比较时,> 可以用 gt 代替,.因为 FreeMarker 会把 > 解释成 FTL 标签的结束字符,当然,也可以使用括号()来避免这种情况

猜你喜欢

转载自blog.csdn.net/weixin_40427212/article/details/84337844