日期:2014-05-17  浏览次数:20691 次

freemarker模板生成doc文档的数据如何循环到文档里?

如图,模板是个合同,红圈部分是要往进写入的数据,但是数据是数组形式,如何能够循环到doc里面?
下面是网上找的案例,如果SQL中查出一条记录可以按freemark标签添加参数,但是如果是多条记录该如何能循环到这个格式里呢?
	public static void creatWord() {
try {
//创建配置实例
Configuration cfg = new Configuration();
cfg.setDefaultEncoding("utf-8");
cfg.setDirectoryForTemplateLoading(new File("D:\\uploadFiles"));
cfg.setObjectWrapper(new DefaultObjectWrapper());

//获取模板
Template temp = cfg.getTemplate("test.xml");
temp.setEncoding("utf-8");

//创建数据模型
Map map = new HashMap();
map.put("content", "这是基于freemarker导出成word格式。包含图片");
map.put("userName", "吴亭");
map.put("age", "27");

//将模板和数据模型合并生成文件
File docFile = new File("D:\\uploadFiles\\test.doc");
Writer docout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
temp.process(map, docout);

} catch (Exception e) {
e.printStackTrace();
}
}

分数比较少,希望大神帮忙
------解决方案--------------------
 对于Freemarker中如果使用HashMap(或SimpleHash)时候,如果HashMap的键值对(key,value)的value是普通的Scalar对象(String、Double等),此种情况下,对于ObjectWrapper可以直接使用DEFAULT_WRAPPER,在Freemarker模板文件中使用也相对简单,只需要采用如下方式即可:
<#list scalarMap?keys as mykey>
    Scalar Map key is :${mykey}
    Scalar Map value is:${scalarMap[mykey]}
</#list>
    但如果Map的value是JavaBean对象(例如JavaBean为User,有userId和userName两个属性),如果需要在Freemarker模板文件中使用类似el表达式的方式获取JavaBean的属性值,也即:${testmap[key].userId},此种情况下不能采用缺省的DEFAULT_WRAPPER,需要使用ObjectWrapper.BEANS_WRAPPER。
    当然如果在Freemarker模板文件中不需要获取JavaBean对象的属性值,也即只需要获取对象本身:${testmap[key]},则也可以不使用ObjectWrapper.BEANS_WRAPPER。