All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.quhaodian.common.utils.DirectiveUtils Maven / Gradle / Ivy

package com.quhaodian.common.utils;

import freemarker.core.Environment;
import freemarker.template.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.support.RequestContext;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import static org.springframework.web.servlet.view.AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE;

/**
 * Freemarker标签工具类
 */
public abstract class DirectiveUtils {
	/**
	 * 输出参数:对象数据
	 */
	public static final String OUT_BEAN = "tag_bean";
	/**
	 * 输出参数:列表数据
	 */
	public static final String OUT_LIST = "tag_list";
	/**
	 * 输出参数:分页数据
	 */
	public static final String OUT_PAGINATION = "tag_pagination";
	/**
	 * 参数:是否调用模板。
	 */
	public static final String PARAM_TPL = "tpl";
	/**
	 * 参数:次级模板名称
	 */
	public static final String PARAM_TPL_SUB = "tplSub";

	/**
	 * 将params的值复制到variable中
	 * 
	 * @param env
	 * @param params
	 * @return 原Variable中的值
	 * @throws TemplateException
	 */
	public static Map addParamsToVariable(
			Environment env, Map params)
			throws TemplateException {
		Map origMap = new HashMap();
		if (params.size() <= 0) {
			return origMap;
		}
		Set> entrySet = params.entrySet();
		String key;
		TemplateModel value;
		for (Map.Entry entry : entrySet) {
			key = entry.getKey();
			value = env.getVariable(key);
			if (value != null) {
				origMap.put(key, value);
			}
			env.setVariable(key, entry.getValue());
		}
		return origMap;
	}

	/**
	 * 将variable中的params值移除
	 * 
	 * @param env
	 * @param params
	 * @param origMap
	 * @throws TemplateException
	 */
	public static void removeParamsFromVariable(Environment env,
			Map params,
			Map origMap) throws TemplateException {
		if (params.size() <= 0) {
			return;
		}
		for (String key : params.keySet()) {
			env.setVariable(key, origMap.get(key));
		}
	}

	/**
	 * 获得RequestContext
	 * 
	 * ViewResolver中的exposeSpringMacroHelpers必须为true
	 * 
	 * @param env
	 * @return
	 * @throws TemplateException
	 */
	public static RequestContext getContext(Environment env)
			throws TemplateException {
		TemplateModel ctx = env
				.getGlobalVariable(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE);
		if (ctx instanceof AdapterTemplateModel) {
			return (RequestContext) ((AdapterTemplateModel) ctx)
					.getAdaptedObject(RequestContext.class);
		} else {
			throw new TemplateModelException("RequestContext '"
					+ SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE
					+ "' not found in DataModel.");
		}
	}


	/**
	 * 模板调用类型
	 */
	public enum InvokeType {
		body, custom, sysDefined, userDefined
	}

	public static Integer getInt(String name, Map params)
			throws TemplateException {
		TemplateModel model = params.get(name);
		if (model == null) {
			return null;
		}
		if (model instanceof TemplateScalarModel) {
			String s = ((TemplateScalarModel) model).getAsString();
			if (StringUtils.isBlank(s)) {
				return null;
			}
			try {
				return Integer.parseInt(s);
			} catch (NumberFormatException e) {
			}
		} else if (model instanceof TemplateNumberModel) {
			return ((TemplateNumberModel) model).getAsNumber().intValue();
		} else {
		}
		return 0;
	}
	
	public static String getString(String name,
			Map params) throws TemplateException {
		TemplateModel model = params.get(name);
		if (model == null) {
			return null;
		}
		if (model instanceof TemplateScalarModel) {
			return ((TemplateScalarModel) model).getAsString();
		} else if ((model instanceof TemplateNumberModel)) {
			return ((TemplateNumberModel) model).getAsNumber().toString();
		} else {
			return "";
		}
	}
	public static Date getDate(String name,
			Map params) throws TemplateException {
		TemplateModel model = params.get(name);
		if (model == null) {
			return null;
		}
		if (model instanceof TemplateDateModel) {
			return ((TemplateDateModel) model).getAsDate();
		}  else {
			return null;
		}
	}
	public static Long getLong(String name, Map params)
			throws TemplateException {
		TemplateModel model = params.get(name);
		if (model == null) {
			return null;
		}
		if (model instanceof TemplateScalarModel) {
			String s = ((TemplateScalarModel) model).getAsString();
			if (StringUtils.isBlank(s)) {
				return null;
			}
			try {
				return Long.parseLong(s);
			} catch (NumberFormatException e) {
			}
		} else if (model instanceof TemplateNumberModel) {
			return ((TemplateNumberModel) model).getAsNumber().longValue();
		} else {
		}
		return 0l;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy