`

freemaker 遍历list嵌套map

阅读更多
有这样一个数据结构List<Map<String, Object>> items = ...,需求是将这个List中的数据映射到一个xml文件中。技术用到freemaker。使用freemaker的目的就是使得数据和数据的展现形式分离。

1.程序如下:
List<Map<String, Object>> items = ...
Map<String, Object> root = new HashMap<String, Object>();
root.put("taskId", taskId + "");
root.put("items", items);
root.put("tasks", tasks);

java.io.StringWriter w = new StringWriter();
temp.process(root, w);


2.模板如下:
<?xml version="1.0" encoding="utf-8" ?>
<function id="${taskId}" name="default" desc="默认配置文件">
	<#if items?size != 0>
	<#list items as item>
	<item key="${item["ITEMKEY"]}" value="${item["ITEMNAME"]}" desc="${item["ITEMDESC"]?if_exists}" />
	</#list>
	</#if>
	<#list tasks as task>
	<component id="${task["PROGRAMID"]}" name="${task["TASKNAME"]}" desc="${task["TASKNAME"]?if_exists}">
		<#if task["items"]?size != 0>
		<#list task["items"] as item>
		<item key="${item["ITEMKEY"]}" value="${item["ITEMNAME"]}" desc="${item["ITEMDESC"]?if_exists}" />
		</#list>
		</#if>
	</component>
	</#list>
</function>


3.生成的xml文件按如下:
<?xml version="1.0" encoding="utf-8" ?>
<function id="8001" name="default" desc="默认配置文件">
	<item key="sender" value="dy.cn" desc="发件人姓名" />
	<item key="server" value="mail.n" desc="服务器地址" />
	<item key="user" value="n" desc="用户名" />
	<item key="password" value="n" desc="密码" />
	<item key="subject" value="警" desc="题" />
	<item key="receiverlist" value=""
		desc="" />
	<item key="defaultproduct" value="1" desc="组" />
	<item key="mobilelist" value="13812345678" desc="表" />
	
	<component id="GatewayStateRule" name="GatewayStateRule"
		desc="规则">
		<item key="duration" value="600" desc="时长" />
		<item key="mode" value="1,2" desc="邮件" />
		<item key="times" value="3" desc="数" />
		<item key="interval" value="3" desc="报" />
		<item key="message" value="信息" />
		<item key="alertedtimes" value="0" desc="数" />
		<item key="lastalerttime" value="1978-1-1 00:00:00" desc="间" />
	</component>	
</function>

分享到:
评论
1 楼 zjfshowtime 2013-05-14  
你觉得你的代码能通么?你是copy的别人的,还是...

相关推荐

    freemaker学习教程

    例如,遍历List&lt;Map&gt;: ```freemarker &lt;#list list as item&gt; &lt;#list item as key, value&gt; Key: ${key}, Value: ${value} &lt;/#list&gt; &lt;/#list&gt; ``` 这里,外层`&lt;#list&gt;`遍历List,内层`&lt;#list&gt;`遍历每个Map的键值对...

    freemarker中文学习资料

    - **Map对象**:Freemarker支持Java Map对象作为数据模型,键值对可以通过模板语法访问。 - ** Beans**:可以直接使用Java Bean对象,属性可以通过`.`操作符访问。 - **List和集合**:列表和集合可以通过`&lt;#list&gt;...

    freemarker 2.3.18 中文手册

    9. **条件判断和循环**:`&lt;#if&gt;`、`&lt;#else&gt;`、`&lt;#elseif&gt;`用于条件判断,`&lt;#foreach&gt;`遍历集合,`&lt;#list&gt;`则提供更灵活的列表处理。 10. **逻辑运算和比较**:Freemarker支持基本的逻辑运算符(`&&`、`||`、`!`)和...

    Freemarker使用指南

    5. 遍历:`&lt;#list&gt;`指令可以用来遍历List或其他集合类型的变量,例如`&lt;#list users as user&gt;`,在循环中可以访问每个用户的属性。 除了以上基础用法,Freemarker还支持更多的高级特性,如宏定义、指令嵌套、模板...

    freemarker教程

    例如,`${expression}`用于插入变量值,`&lt;#if condition&gt;`和`&lt;#else&gt;`用于条件判断,`&lt;#list items as item&gt;`用于循环遍历。 2. 数据模型:Freemarker与Java对象交互的关键是数据模型。开发者将Java对象封装进一个`...

    freemarker03

    例如,`&lt;#foreach item in list&gt;...&lt;#if item?last&gt;...&lt;/#if&gt;&lt;/#foreach&gt;`,可以遍历list中的每个元素,item?last判断是否为最后一个元素。 4. **#include指令**:插入其他模板文件,实现模板的复用。例如,`...

    Java通过POI读取Excel遍历数据,批量生成word文档

    // 处理cellValue,例如存储到List或Map中 } } workbook.close(); fis.close(); ``` 读取Excel数据后,我们可以创建一个Word模板,使用` XWPFDocument `类来代表Word文档。这个模板可以包含占位符,这些占位符将...

    FreeMarker

    这些对象可以是Java POJOs、Map、List等。 3. **模板语言(Template Language)**:FreeMarker的模板语言包含一系列指令和表达式,如`&lt;#if&gt;`、`&lt;#foreach&gt;`、`${}`等,用于控制模板的渲染逻辑。 ### FreeMarker ...

    freemarker 语法大全 文档

    - `list`:用于遍历序列(如List、数组)。 - `include`:包含其他模板文件,可以传递参数和设置解析选项。 - `import`:导入其他模板中的宏或其他定义。 - `compress`:压缩输出的空白字符。 - `escape`、`...

    freemarker语法

    3. **空标签**: `&lt;#directivename parameter/&gt;`,例如`&lt;#list ... /&gt;`表示一个不需要配对的标签。 在使用FTL标签时需要注意: - 标签必须正确嵌套,不能交叉使用。 - 如果使用不存在的指令,FreeMarker会抛出错误...

    freemaker语法

    - `&lt;#foreach&gt;`:循环遍历数组、集合或Map的键值对。 - `&lt;#assign&gt;`:定义变量,如`&lt;#assign x = "Hello"&gt;`。 - `&lt;#function&gt;`:自定义函数,可以封装复杂的逻辑。 - `&lt;#import&gt;`和`&lt;#include&gt;`:导入其他模板或...

    FreeMarke开发指南

    `&lt;#list items as item&gt;`可以遍历items,`&lt;#break&gt;`用于提前退出循环。 - **`include`**:用于包含其他模板,增强模板的复用性,如`&lt;#include "header.ftl"&gt;`。 - **`import`**:导入Java类或者方法,使得在模板中...

    Xml做数据源模板显示新闻的源码.rar

    首先,XML文件通常包含一系列的元素,这些元素通过开始标签和结束标签定义,并且可以嵌套在一起形成层级结构。在新闻应用中,每个新闻条目可能对应一个XML元素,元素内部则包含标题、作者、发布日期和内容等子元素。...

    cms后台管理

    protected List&lt;Content&gt; getList(Map, TemplateModel&gt; params, Environment env) throws TemplateException { Integer[] ids = DirectiveUtils.getIntArray(PARAM_IDS, params); if (ids != null) { //根据内容...

Global site tag (gtag.js) - Google Analytics