本文主要介绍了freemarker的常用标签<#list> <#import> <#assign> <#if> <#else> <#elseif>标签,并配有相应的案例。
在这里我想先介绍freemarker一个比较重要的概念:顶层变量:所谓顶层变量就是存在数据模型中的变量.
<#assign>标签的作用就是替换和创建顶层变量。
先看本项目的目录结果如下图所示:
其中FreeMarkerTest2是一个测试程序:
a.ftl和b.ftl是写freemarker标签的地方(.ftl文件就是freemarker template 文件中的意思,翻译成中文是:freemarker 模板文件)
FreeMarkeerTest2的代码如下:
1 package com.supwisdom; 2 3 import freemarker.template.Configuration; 4 import freemarker.template.Template; 5 6 import java.io.File; 7 import java.io.PrintWriter; 8 import java.util.ArrayList; 9 import java.util.Date; 10 import java.util.HashMap; 11 import java.util.Map; 12 13 /** 14 * Created by ${秦林森} on 2017/8/1. 15 */ 16 public class FreeMarkerTest2 { 17 public static void main(String[] args) throws Exception{ 18 //创建freemarker配置实例 19 Configuration cfg = new Configuration(); 20 //这个template是目录中的文件夹名: 21 cfg.setDirectoryForTemplateLoading(new File("template")); 22 //创建数据模型 23 Map root=new HashMap<>(); 24 ArrayList<Object> objects = new ArrayList<>(); 25 for(int i=1;i<=7;i++){ 26 objects.add("星期"+i); 27 } 28 HashMap<String, Address> map = new HashMap<>(); 29 map.put("1",new Address("中国","北京")); 30 map.put("2",new Address("美国","华盛顿")); 31 map.put("3",new Address("尼日利亚","内罗毕")); 32 root.put("user","秦林森"); 33 root.put("lis",objects); 34 root.put("date",new Date()); 35 root.put("map",map); 36 //加载模板文件 37 Template template=cfg.getTemplate("b.ftl"); 38 //显示生成数据: 39 PrintWriter out = new PrintWriter(System.out); 40 template.process(root,out); 41 out.flush(); 42 out.close(); 43 } 44 }
b.ftl的代码如下:其中我认为遍历map集合比较难,已用红色标出。
1 <#assign user="林肯"><#--替换一个顶层变量--> 2 ${user!}你是最棒的。you will conquer the world. 3 <#assign user=4> 4 5 <#list lis as n> 6 ${n} 7 </#list> 8 <#list lis as a> 9 ${a} 10 </#list> 11 12 <#--时间的格式化输出--> 13 ${date?string("yyyy_MM_dd HH:mm:ss")} 14 <#assign user="仁慈"><#--创建一个顶层变量,所谓顶层变量就是直接放在数据模型中的值。--> 15 <#assign number=[1,2,3]><#--这句话相当于java语言中的int[] number=[1,2,3];赋值操作--> 16 ${number[0]} 17 <#assign subs="01234"> 18 ${subs[0..1]} 19 20 ${subs[1..4]} 21 <#--遍历map集合首先要得到keys--> 22 <#assign keys=map?keys> 23 <#list keys as c> 24 key: ${c} 国家:${map["${c}"]["country"]} 城市:${map["${c}"].city} 25 </#list> 26 <#--这两种拼接字符串的效果是一样的--> 27 ${"hellooewio${user}"} 28 ${"hello"+user!} 29 30 if else标签的使用: 31 <#--给a先赋值--> 32 <#assign a=7> 33 <#if a gt 6><#--这里推荐使用gt代替数学中的大于符号">"--> 34 a大于6 35 </#if> 36 if else使用: 37 <#assign b=5> 38 <#if b gt 6> 39 b 大于6 40 <#else> 41 b小于6 42 </#if> 43 if elseif else的使用: 44 <#assign c=4> 45 <#if c gt 4> 46 c大于4 47 <#elseif c lt 4> 48 c小于4 49 <#else> 50 c等于4. 51 </#if> 52 53 freemarker的内建函数: 54 <#assign a="i you me"> 55 <#assign b="I YOU ME"> 56 <#assign c="<h>people</h>"> 57 <#--内建函数cap_first,lower_case,upper_case--> 58 ${a?cap_first}<#--把a的第一个首字母变为大写--> 59 ${b?lower_case}<#--把b的字符串转化为小写--> 60 ${a?upper_case}<#--把a字符串转为大写--> 61 ${c?html}<#--对字符串进行hmtl编码,本例输出的结果是:<h>people</h>--> 62 63 空值处理运算符:! ?? 64 ${oewoei!"人民"}<#--如果数据模型中不存在oewoei这个变量时,赋一个初始值"人民"--> 65 ${"oiieo"!}<#--如果数据模型中不存在oiieo这个变量时,赋一个初始值""--> 66 <#if oweio??><#--oweio在数据模型中存在时输出存在,反之输出不存在--> 67 oweio存在 68 <#else> 69 oweio不存在。 70 </#if> 71 include指令的使用,它相当于把一个文件的内容加到本文件中。 72 <#include "sixi.txt"> 73 74 自定义指令宏指令(没有任何参数的): 75 <#macro a> 76 <#if oweioo??> 77 存在 78 <#else> 79 不存在 80 </#if> 81 </#macro> 82 调用自定义指令:(无参的) 83 <@a></@a> 84 85 <#macro m2 a b c > 86 ${a}+${b}+${c} 87 </#macro> 88 <@m2 a="老高" b="老张" c="老马" /> 89 把a.ftl文件导入到b.flt中: 90 命名空间命名的: 91 一个重要的规则就是路径不应该包含大写字母,为了分隔词语,使用下划线_,就像 92 wml_form(而不是 wmlForm)。 93 94 <#import "a.ftl" as aaa> 95 <#--调用a.ftl中的变量和方法(宏)--> 96 <@aaa.bo> 97 I am chinese 98 </@aaa.bo> 99 ${aaa.mail}
a.ftl文件的代码如下:
1 <#--自定义bo这个宏--><#macro bo> 2 <table> 3 <tr> 4 <td> 5 <#nested> 6 </td> 7 <td> 8 <#nested> 9 </td> 10 </tr> 11 </table> 12 </#macro> 13 14 <@bo> 15 I love china. 16 I love LuAn 17 </@bo> 18 <#assign mail="[email protected]">
Address类的代码如下:
1 package com.supwisdom; 2 3 /** 4 * Created by ${秦林森} on 2017/7/31. 5 */ 6 public class Address { 7 private String country; 8 private String city; 9 10 public Address(String country, String city) { 11 this.country = country; 12 this.city = city; 13 } 14 15 public String getCountry() { 16 return country; 17 } 18 19 public void setCountry(String country) { 20 this.country = country; 21 } 22 23 public String getCity() { 24 return city; 25 } 26 27 public void setCity(String city) { 28 this.city = city; 29 } 30 }
具体的参考资料可通过下列网址下载:里面有尚学堂的视频和freemarker中文手册。
http://pan.baidu.com/s/1slJilAl
时间: 2024-10-29 03:44:56