Freemarker教程,Freemarker 自定义方法 【含源码】
Freemarker 自定义Function Demo
Freemarker 自定义 Funcation
其实和我们的自定义标签逻辑是一个意思,就是在加载Template
的时候bean
之间的方法调用。
在项目中的使用详细代码参见 Shiro Demo
:https://www.sojson.com/jc/shiro.html 。
Freemarker Demo 实例讲解教程:https://www.sojson.com/jc/freemarker.html
这里要详细说明的一点是, TemplateDirectiveModel
在FreeMarker 2.3.11版本后从原来的
TemplateTransformModel
演变而来,
TemplateTransformModel
已经被标记@deprecated
(已过时)。
使用Demo 1:
Java代码:
要创建一个Funcation
,就要继承freemarker.template.TemplateDirectiveModel
, Java 代码路径com.sojson.core.freemarker.function.Option
。
public class Option implements TemplateMethodModelEx{ /** * @使用规则 * args[0] : key 如 : 1 * args[1] : JSON Data,如:'{"1":"男","0":"女","default":"未知"}' * 使用 Option('1','{"1":"男","0":"女","default":"未知"}') 得到的是男 */ @Override public Object exec(List args) throws TemplateModelException { if(args.size() !=2){ LoggerUtils.fmtDebug(getClass(), "参数个数不对,得到的个数为:%s",args.size() ); return ""; } SimpleScalar type = (SimpleScalar) args.get(0); SimpleScalar json = (SimpleScalar)args.get(1); if(StringUtils.isBlank(type,json)){ LoggerUtils.fmtDebug(getClass(), "有为空的参数!" ); return ""; } String jsonStr = json.getAsString(); String typeStr =type.getAsString(); JSONObject so = JSONObject.fromObject(jsonStr); String defau = so.optString("default"); String result = so.optString(typeStr)==null?defau:so.optString(typeStr); return result ; } }
前端使用:
德玛西亚考试成绩:$ {Option('A','{"A":"优秀","B":"及格","C":"不及格","D":"差","default":"缺考"}')}
结果输出:
德玛西亚考试成绩:优秀
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/216.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。