FreeMarker对应各种数据结构解析

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("王大麻子",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>会报错,所以要先进行赋值然后再进行循环遍历数据,文件中打印如下

FreeMarker对应各种数据结构解析相关推荐

  1. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  2. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  3. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-堆和优先队列(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  4. AVI音视频封装格式学习(三)——AVI 数据结构解析

    这里介绍AVI会使用到的数据结构,为了避免翻译引入歧义,决定该部分还是使用英文原文,如后续有时间再进行翻译. AVIMAINHEADER structure The AVIMAINHEADER str ...

  5. Redis基本数据类型String——数据结构解析

    String Redis没有直接使用C语言的传统的字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型. 下面我将解释为什么Redis要自己 ...

  6. Redis(一)数据结构解析

    目录 1. SDS 的定义 2. 动态字符串 常数复杂度获取字符串长度 杜绝缓存区溢出 SDS 两种优化策略 空间预分配 惰性空间释放 3. 链表和链表节点 每个链表节点用listNode结构表示 链 ...

  7. XTF文件的数据结构解析完成

    ** XTF文件的数据结构解析完成 ** 今天纪念一下,从2020/12/2-2020/12/16,历时两周完成XTF文件的全部数据结构的解析,今天比较晚了,之后会详细介绍一下解析XTF文件的方法,以 ...

  8. 硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)

    上一篇分享的是<深入理解JVM>,这篇给大家分享<Redis 五种数据结构以及三种高级数据结构解析>. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis ...

  9. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-集合和映射

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

最新文章

  1. 隐藏基于对话框的MFC应用程序窗口的方法
  2. 【Java】6.7 内部类
  3. SAP CRM呼叫中心点了interact按钮后的处理逻辑
  4. 利用信号量实现线程同步
  5. linux安装控制台驱动,linux设备驱动之控制台驱动
  6. 新发布AlbumOnNet 、dotnetCharting控件注册资料
  7. android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
  8. AI产品开发指南:5大核心环节搞定机器学习工作流
  9. CFFI - ABI模式与API模式
  10. 软件测试_Loadrunner_APP测试_性能测试_脚本优化_脚本回放
  11. net core上传文件异常:Multipart body length limit 16384 exceeded.
  12. JAVA图像相似度识别器
  13. Oracle数据库 查询所有表
  14. 四六级考试中的计算机类文章,四六级英语考试进入机考时代
  15. ps如何设置滚动鼠标放大和缩小图像
  16. linux日志查看命令
  17. word2003流程图变成图片_用Word2003绘制流程图的方法
  18. 谈谈分布式服务治理框架 Dubbo 重大升级
  19. MQ同类产品对比以及选型-RocketMq的背后故事
  20. 威海南海新区首届“龙腾齐鲁”龙王争霸赛开赛

热门文章

  1. angular.forEach
  2. 基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
  3. 【POI 2007】Tetris Attack 正方体大作战(tet)
  4. distinct 多列问题 group by 解决
  5. EngJS(超轻量) 中数据双向绑定如何使用
  6. 最最基本的Git入门 -- 本地仓库操作
  7. BZOJ 1040 骑士
  8. 阿里巴巴2014校招笔试错误汇总
  9. .NET中SQL Server数据库连接方法
  10. 设计模式---原型模式(Prototype Pattern)