FreeMarker的递归生成网站类
package com.uuzz.demo.template.service.impl;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.uuzz.demo.template.service.HtmlCreator;
import com.uuzz.demo.template.util.FreeMarderFactory;
import freemarker.cache.StringTemplateLoader;
import freemarker.core.TemplateElement;
import freemarker.ext.beans.StringModel;
import freemarker.template.Template;
import freemarker.template.TemplateSequenceModel;
@Service
public class HtmlCreatorImpl implements HtmlCreator {
private String homeTemplate;
private String basePath;
@Override
public String getHomeTemplate() {
return homeTemplate;
}
@Override
public void setHomeTemplate(String homeTemplate) {
this.homeTemplate = homeTemplate;
}
@Override
public String getBasePath() {
return basePath;
}
@Override
public void setBasePath(String basePath) {
this.basePath = basePath;
}
@Override
public boolean createHtmlByNameAndData(String templateName, Map<String, Object> dataMap) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean createHtmlByTemplateAndData(Map<String, String> templateMap, Map<String, Object> dataMap) {
StringTemplateLoader stringTemplateLoader = (StringTemplateLoader) FreeMarderFactory.getTemplateLoader();
Iterator<String> iterator = templateMap.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
stringTemplateLoader.putTemplate(key, templateMap.get(key));
}
recuriseHtml(getHomeTemplate(), stringTemplateLoader, dataMap);
FreeMarderFactory.getConfiguration().clearTemplateCache();
iterator = templateMap.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
try {
Template template = FreeMarderFactory.getConfiguration().getTemplate(key);
File afile = new File(this.getBasePath() + key);
if (!afile.exists()) {
afile.createNewFile();
}
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile), "UTF-8"));
template.process(dataMap, out);
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
public void recuriseHtml(String templateName, StringTemplateLoader stringTemplateLoader, Map<String, Object> rootMap) {
try {
Template template = FreeMarderFactory.getConfiguration().getTemplate(templateName, "UTF-8");
TemplateSequenceModel list = template.getRootTreeNode().getChildNodes();
for (int i = 0; i < list.size(); i++) {
StringModel model = (StringModel) list.get(i);
TemplateElement element = (TemplateElement) model.getWrappedObject();
if (element.getNodeName().equals("Include")) {
String templateSource = element.getSource();
recuriseHtml(templateSource.substring(templateSource.indexOf("\"") + 2,
templateSource.lastIndexOf("\"")), stringTemplateLoader, rootMap);
}
}
StringWriter out = new StringWriter();
Map<String, Object> dataMap = (Map<String, Object>) rootMap.get(templateName);
template.process(dataMap, out);
stringTemplateLoader.putTemplate(templateName, out.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
调用方式
Map<String, String> templateMap = new HashMap<String, String>();
Map<String, Object> dataMap = new HashMap<String, Object>();
QueryTestBean t = new QueryTestBean();
//获取所有模板
List<TestBean> resultList = testServiceImpl.queryPojoForList(t);
// 所有模板
for (int i = 0; i < resultList.size(); i++) {
TestBean testBean = resultList.get(i);
templateMap.put(testBean.getColumn_2(), testBean.getColumn_6());
List<Map<String, String>> templateDataMap = new ArrayList<Map<String, String>>();
Map<String, Object> data = new HashMap<String, Object>();
Map<String, String> map = new HashMap<String, String>();
map.put("name", "您好!" + testBean.getColumn_2());
map.put("href", "href");
templateDataMap.add(map);
data.put("list", templateDataMap);
dataMap.put(testBean.getColumn_2(), data);
}
htmlCreator.setHomeTemplate("index.html");
htmlCreator.setBasePath(this.request.getServletContext().getRealPath("/html" )+ "/");
htmlCreator.createHtmlByTemplateAndData(templateMap, dataMap);
分享到:
相关推荐
parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值 的如parse=true,而不是parse="true" 用例 /common/copyright.ftl 包含内容 Ftl代码 Copyright ...
FreeMarker官网下载的最新版本的模板引擎。它能以非常简单的方式来输出显示数据。
freeMarker导出word两种方式:1、生成xml方式模板并附带图片导出,2、总结生成的html模板可以直接导出word,也可以在页面查看。项目中使用过,拿出来分享
通过freemarker和jacob生成合同word文档html生成word文档(word模板类型的资源)压缩包里有有详细的生成方式,里面有两种生成方式,一种是用html生成。另一种则是后台生成 1、第一步通过office软件将word文档命名好...
通过三种不同的方式(freemarker+jfreechart、xDoc、POI),根据模板创建Word文件。可以动态修改Word中表格(table)、图表(chart)等数据。导入工程后,可直接运行xxxDemo文件,查看文档生成效果。详见压缩包中的...
本工程旨在演示Servlet和FreeMarker的使用。 本工程编码方式:UTF-8 查看相应博客:http://blog.csdn.net/gaohuanjie/article/details/36676799
不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取模板子类。 2. ...
经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 word的几个主要xml标志 w:body 正文内容 w:p 一个段落 w:tbl 表格数据 w...
struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动生成表结构 freemarker 用摸版来表现视图,这个例子就是简单的用法没进行进一不的架设
基于Java语言来导出Word文档的方式也有很多种,如Jacob,Apache POI,Freemarker,PageOffice,java2word 等等。。。。 在这里将通过Freemarker这个模板引擎来实现导出 Word,项目不限于Swing,SSH,SSM,Spring ...
eclipse freemarker 插件,将下载文件解压方式到 eclipse/dropins 路径下,重启eclipse即可。
FreeMarKer+jsp的使用方法,并且使用了两种调用方式,servlet与struts2的使用方式,适合新手学习使用!
其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:(x>y)> ...
什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................
4、资源概要:先阅读README.md文档,然后根据文档中的资源示例运行代码,有postman和内部调用两种方式; 5、项目目录other/下面有示例文件可快速入手; 适合人群:需要通过法务提供的word类型的合同模板,填充数据生成...
freemarker入门实例,直接运行(junit)测试类
用于 Visual Studio 代码的 FreeMarker Visual Studio Code 的 FreeMarker 语言着色扩展。 您可以阅读有关FreeMarker的更多信息。 用法 扩展并打开任何.ftl文件。 这是基于库中的TextMate捆绑包。 完全支持带有方...
Word从2003开始支持XML格式,用XML+Freemarder还做就很简单了,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。...
基于jfinal+shiro+layui+freemarker+ueditor+mysql等框架和技术结合maven多模块方式构建开发的一款通用内容发布系统。
采用hibernate3+struts2+spring2+freemarker主流技术架构 懂html就能建站,提供最便利、合理的使用方式 强大、灵活的标签,用户自定义显示内容和显示方式 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好...