Freemarker遍历map<String,Map<String,Object>>
时间: 2023-10-14 19:27:06 浏览: 44
你可以使用Freemarker的内置指令`<#list>`来遍历一个`map<String,Map<String,Object>>`。具体步骤如下:
1. 使用`<#list>`指令遍历外层的`map`,并使用`<#list>`指令遍历内层的`map`,示例代码如下:
```
<#list map?keys as key>
<#list map[key]?keys as subKey>
${key}.${subKey}: ${map[key][subKey]}<br>
</#list>
</#list>
```
2. 在模板中使用`${key}`获取外层`map`的键值,使用`${subKey}`获取内层`map`的键值,`${map[key][subKey]}`获取`map`内存储的值。
这样就可以方便地遍历并获取`map<String,Map<String,Object>>`中的数据。
相关问题
freemarker 解析map
你可以使用Freemarker的内置指令 `list` 和 `foreach` 来遍历Map。下面是一个使用Freemarker解析Map的示例:
假设有如下Map:
```
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("age", 18);
map.put("gender", "男");
```
在Freemarker模板中,你可以这样写:
```
<#list map?keys as key>
${key}: ${map[key]}
</#list>
```
这将会输出:
```
name: 张三
age: 18
gender: 男
```
解释一下这段代码:
- `map?keys` 表示获取Map中所有的键名。
- `as key` 表示将键名赋值给变量 `key`。
- `${key}: ${map[key]}` 表示输出键名和对应的值。
你也可以使用 `foreach` 指令来实现同样的效果:
```
<#foreach key, value in map>
${key}: ${value}
</#foreach>
```
输出结果也是一样的:
```
name: 张三
age: 18
gender: 男
```
希望这能够帮助到你!
freemarker生成docx文件
Freemarker 是一个模板引擎,可以将模板文件与数据合并生成新的文件,因此可以利用 Freemarker 生成 docx 文件。
以下是一个简单的示例:
1. 引入依赖
```xml
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
```
2. 创建模板
创建一个 docx 模板文件,使用 Word 编辑器打开,添加需要动态生成的内容,例如表格、文本等。
3. 编写 Freemarker 模板
在模板中使用 Freemarker 语法,例如:
```xml
<#list users as user>
<p>${user.name}</p>
<p>${user.age}</p>
</#list>
```
其中 `users` 是数据源,`user` 是遍历的变量。
4. 生成 docx 文件
读取模板文件,合并数据源,生成 docx 文件:
```java
public void generateDocx() throws Exception {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setClassForTemplateLoading(this.getClass(), "/templates/");
cfg.setDefaultEncoding("UTF-8");
Template template = cfg.getTemplate("template.docx");
Map<String, Object> data = new HashMap<>();
List<User> users = new ArrayList<>();
users.add(new User("Tom", 20));
users.add(new User("Jerry", 18));
data.put("users", users);
XWPFDocument doc = new XWPFDocument();
OutputStream out = new FileOutputStream("output.docx");
Writer writer = new OutputStreamWriter(out, "UTF-8");
template.process(data, writer);
doc.write(out);
out.close();
}
```
其中 `User` 是数据模型,`template.docx` 是模板文件名,`output.docx` 是生成的文件名。
运行代码即可生成 docx 文件。