`

FreeMarker成站方式

阅读更多
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);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics