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
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。
