内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

FreeMarker对应各种数据结构解析

2019-01-07 20:19 出处:清屏网 人气: 评论(0

FreeMarker 是一个采用 Java 开发的模版引擎,是一个基于模版生成文本的通用工具。 FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,并通过模板显示准备的数据

FreeMarker简单的工作原理

所以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 只需要如下写即可

name:${name}
复制代码

在文件中FreemarkerTest文件中就会看到输出的内容

集合的解析

List集合

代码如下

List<String> list = new ArrayList<>();
list.add("Mazi");
list.add("LaoLiu");
resultMap.put("users",list);
复制代码

如果是想要遍历上面代码中的list集合,那么直接在模板文件中如下写即可

<#list users as item>
    name:${item}
</#list>

复制代码

其中users是传入模板文件中的key值,item只是取得一个别名,随意即可,我们可以在生成的模板文件中看到如下信息

如果集合中存储的是对象呢?例如下

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>

复制代码

文件中打印如下

Map集合

有如下的数据结构,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("Mazi",11));
        listOne.add(new User("Ergou",11));
        listTwo.add(new User("Laoliu",11));
        listTwo.add(new User("Bangchui",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> 会报错,所以要先进行赋值然后再进行循环遍历数据,文件中打印如下

分享给小伙伴们:
本文标签: FreeMarker数据结构

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号