UtilTemplate.java 2.27 KB
package com.taover.util;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

public class UtilTemplate {
	
	/**
	 * 通过velocity引擎渲染模板文件,模板所在类路径
	 * @param templateClassPath
	 * @param data
	 * @return
	 */
	public static String renderTemplateClass(String templateClassPath, Map<String, Object> data){
		//初始化
		VelocityEngine ve = new VelocityEngine();
		Properties p = new Properties();
		p.put("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.SimpleLog4JLogSystem");
		p.put("runtime.log.logsystem.log4j.category", "velocity");
		p.put("runtime.log.logsystem.log4j.logger", "velocity");
		p.put(VelocityEngine.INPUT_ENCODING, "UTF-8");
		p.put(VelocityEngine.OUTPUT_ENCODING, "UTF-8");
		p.put(VelocityEngine.ENCODING_DEFAULT, "UTF-8");
		p.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
		try {
			ve.init(p);
		} catch (Exception e) {
			StringWriter sw = new StringWriter();
    		e.printStackTrace(new PrintWriter(sw, true));
    		Log log = LogFactory.getLog(UtilTemplate.class);
    		log.error(sw.toString());
		}
		//取得VelocityContext对象
		VelocityContext context = new VelocityContext();
		//向context中放入要在模板中用到的数据对象
		if(data != null){
			Set<String> keySet = data.keySet();
			Iterator<String> iter = keySet.iterator();
			while(iter.hasNext()){
				String key = iter.next();
				context.put(key, data.get(key));
			}
		}
		//选择要用到的模板
		if( !ve.resourceExists(templateClassPath) ){
			return null;
		}
		Template template;
		StringWriter sw = new StringWriter();
		try {
			template = ve.getTemplate(templateClassPath, "UTF-8");			
			//合并输出
			template.merge( context, sw);
		} catch (Exception e) {
			StringWriter swE = new StringWriter();
    		e.printStackTrace(new PrintWriter(swE, true));
    		Log log = LogFactory.getLog(UtilTemplate.class);
    		log.error(sw.toString());
		}
		return sw.toString();
	}
}