FreeMarker 是一個採用 Java 開發的模版引擎,是一個基於模版生成文本的通用工具。 FreeMarker 被設計用來生成 HTML Web 頁面,特別是基於 MVC 模式的應用程序。雖然 FreeMarker 具備一些編程的能力,但一般由 Java 程序準備要顯示的數據,由 FreeMarker 生成頁面,並經過模板顯示準備的數據編程
FreeMarker簡單的工做原理bash
因此FreeMarker能夠針對於Java中存儲的各類數據結構進行解析,而後經過模板文件進行輸出到指定的格式。接下來咱們就簡單說明一下FreeMarker解析各類數據結構的語法是如何寫的。數據結構
代碼以下工具
String name = "World!";
FreemarkerUtil util = new FreemarkerUtil();
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("name",name);
util.fprint("FreemarkerTest.ftl",resultMap,"FreemarkerTest");
複製代碼
若是想將簡單的基礎數據輸入至模板文件中FreemarkerTest.ftl
中呢,在模板文件中FreemarkerTest.ftl
只須要以下寫便可ui
name:${name}
複製代碼
在文件中FreemarkerTest文件中就會看到輸出的內容spa
代碼以下設計
List<String> list = new ArrayList<>();
list.add("Mazi");
list.add("LaoLiu");
resultMap.put("users",list);
複製代碼
若是是想要遍歷上面代碼中的list集合,那麼直接在模板文件中以下寫便可code
<#list users as item>
name:${item}
</#list>
複製代碼
其中users是傳入模板文件中的key值,item只是取得一個別名,隨意便可,咱們能夠在生成的模板文件中看到以下信息cdn
若是集合中存儲的是對象呢?例以下對象
List<User> userList = new ArrayList<>();
userList.add(new User("Mazi",18));
userList.add(new User("Mazi2",18));
resultMap.put("userDatas",userList);
複製代碼
模板文件
<#list userDatas as user>
name: ${user.name}
age: ${user.age}
---------------------
</#list>
複製代碼
文件中打印以下
有以下的數據結構,Java代碼以下
Map<String,String> map = new HashMap<>();
Map<String,Object> resultMap = new HashMap<>();
map.put("name","Mazi");
map.put("age","18");
resultMap.put("map",map);
複製代碼
想要在模板文件中取出Map中的key值和Value只須要在模板文件中以下寫便可
<#list map?keys as key>
key: ${key}
value: ${map[key]}
</#list>
複製代碼
文件中輸出以下
簡單的基礎數據類型和簡單的集合咱們都可以在模板文件中解析出來數據了,那麼接下來咱們瞭解一下若是是一個複雜的數據結構解析呢?例如是List<Map<String,String>>
或者是Map<String,List<Strinbg>>
這種的嵌套型的集合該如何解析呢?
例如咱們有一個一對多的數據結構
Java代碼提下以下
Map<String,Object> resultMap = new HashMap<>();
Map<String,List<User>> testMap = new HashMap<>();
List<User> listOne = new ArrayList<>();
List<User> listTwo = new ArrayList<>();
listOne.add(new User("王大麻子",11));
listOne.add(new User("李二狗",11));
listTwo.add(new User("鄭老六",11));
listTwo.add(new User("吳大棒槌",11));
testMap.put("classA",listOne);
testMap.put("classB",listTwo);
resultMap.put("data",testMap);
複製代碼
那麼在模板文件中該以下解析呢?以下
<#list data?keys as classKey >
班級: ${classKey}
成員以下:
<#assign users = data[classKey]>
<#list users as user>
name: ${user.name}
age: ${user.age}
</#list>
</#list>
複製代碼
assign這個標記是賦值的做用,此時若是直接<#list data[classKey] as user>
會報錯,因此要先進行賦值而後再進行循環遍歷數據,文件中打印以下