freemarker自定义宏Demo

 



import java.io.IOException;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.chongdong.common.exception.APIException;
import com.chongdong.common.util.JacksonUtils;
import com.chongdong.common.util.freemarker.Freemarker;
import com.chongdong.data.entity.OrdBase;
import com.chongdong.data.entity.OrdExtend;
import com.chongdong.service.order.biz.OrdBaseBiz;

import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.WrappingTemplateModel;
/**
 * 订单宏
 * @author yanxh
 *
 */
@Repository
public class OrderDetail implements TemplateDirectiveModel {
	
	@Autowired
	private OrdBaseBiz ordBaseBiz;
	
	/**
	* @param env 系统环境变量,通常用它来输出相关内容,如Writer out = env.getOut();
	* @param map 自定义标签传过来的对象,其key=自定义标签的参数名,value值是TemplateModel类型,而TemplateModel是一个接口类型,通常我们都使用TemplateScalarModel接口来替代它获取一个String 值,如TemplateScalarModel.getAsString();当然还有其它常用的替代接口,如TemplateNumberModel获取number,TemplateHashModel等
	* @param loopVars 循环替代变量
	* @param body 用于处理自定义标签中的内容;当标签是<@myDirective />格式时,body=null
	*/
	@Override
	public void execute(Environment env, Map map, TemplateModel[] loopVars,
			TemplateDirectiveBody body) throws TemplateException, IOException {
		
		/**
		 * 订单ID字符串
		 */
		Long orderId = Freemarker.getLong(map, "orderId");
		
		
		/**
		 * 获取订单信息
		 */
		OrdBase ordBase = null;
		try {
			ordBase = ordBaseBiz.getDetail(orderId);
		} catch (APIException e) {
			e.printStackTrace();
		}
		
		/**
		 * 获取dataJson
		 */
		Map<String, Object> jsonMap = null;
		try {
			OrdExtend ordExtend = ordBase.getOrdExtend();
			if(ordExtend != null) {
				String dataJson = ordExtend.getDataJson();
				if(!StringUtils.isBlank(dataJson)) {
					jsonMap = JacksonUtils.json2map(dataJson);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		loopVars[0]=WrappingTemplateModel.getDefaultObjectWrapper().wrap(ordBase);
		loopVars[1]=WrappingTemplateModel.getDefaultObjectWrapper().wrap(jsonMap);
		body.render(env.getOut()); 
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值