FreeMarker 模版引擎执行动态模版

/**
 * FreeMarker 模版引擎工具类
 * 
 * @version 1.0 
 */
public class FreeMarkerUtils {
	
	/**
	 * 执行动态模版
	 * @param templateName
	 * 			模版名称
	 * @param templateContent
	 * 			模版内容
	 * @param encoding
	 * 			编码格式
	 * @param data
	 * 			数据集
	 * @return
	 * @throws Exception
	 */
	public static String executeFreeMarkerFromStringTemplate(String templateName,String templateContent,String encoding, Map<String,Object> data) throws Exception{
		String result = "";
		Writer out = null;
		try{
			Configuration cfg = new Configuration();
			if(data==null) data=new HashMap<String, Object>();
			data.put("DateMethodUtil", new DateMethod());
			out = new StringWriter(2048);
			StringTemplateLoader stringLoader = new StringTemplateLoader();
			stringLoader.putTemplate(templateName,templateContent);
			cfg.setTemplateLoader(stringLoader);
			Template temp = cfg.getTemplate(templateName, encoding);
			temp.process(data, out);
			out.flush();
			result = out.toString();
		}catch (Exception e) {
			throw e;
		}finally{
			out.close();
		}
		return result;
	}
	
	/**
	 * 日期运算函数
	 *
	 */
	public static class DateMethod implements TemplateMethodModelEx{
		@SuppressWarnings("rawtypes")
		public Object exec(List arguments) throws TemplateModelException {
			Date date = ((SimpleDate) arguments.get(0)).getAsDate();
	        String type = arguments.get(1).toString(); 
	        Integer num = ((SimpleNumber)arguments.get(2)).getAsNumber().intValue();
	        Calendar localCalendar = Calendar.getInstance();  
	        localCalendar.setTime(date);
	        if("d".equalsIgnoreCase(type)){
	        	int i = localCalendar.get(Calendar.DATE);  
	        	localCalendar.set(Calendar.DATE, i + num);
	        }else if("m".equalsIgnoreCase(type)){
	        	int i = localCalendar.get(Calendar.MONTH);  
	        	localCalendar.set(Calendar.MONTH, i + num);
	        }else if("y".equalsIgnoreCase(type)){
	        	int i = localCalendar.get(Calendar.YEAR);  
	        	localCalendar.set(Calendar.YEAR, i + num);
	        }
			return localCalendar.getTime();
		}
	}	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值