JFinal 三种扩展方案示例

  1. 自定义指令      

示例:  金额格式化

public class Money extends Directive{
@Override
public void exec(Env env, Scope scope, Writer writer) {
DecimalFormat df = new DecimalFormat("#.00");
Object value = exprList.eval(scope);
if (value != null) {
value = df.format(value);
write(writer, value.toString());
}
}
}
me.addDirective("money", new Money());
#money(price)


2. 类扩展

示例:  非空判读

public class StringKit extends StrKit{
public static boolean isNotBlank(String str){
return !isBlank(str);
}
}
me.addSharedMethod(new StringKit());


#if(isNotBlank(realName))
...
#else
...
#end


3. 共享对象扩展

示例:

me.addSharedObject("host_res", "www.jfinal.com/resource");
me.addSharedObject("sk", new StringKit());

<img src="#(host_res)/ico/favicon.ico" />

#if(sk.isNotBlank(realName))
...
#else
...
#end


评论区

JFinal

2017-03-03 11:41

刚刚还在前一个贴子希望楼主可以分享呢。三种扩展方式都非常简单,代码量极少,越来越多的小伙们开始在用 jfinal template engine 扩展出各种好玩的功能了。

感谢你的分享

wang

2017-03-04 20:54

wang

2017-03-04 21:15

@JFinal 我刚刚测试了下第二个类扩展,configEngine中设置了me.addSharedMethod(new StringKit());前端html中使用这个类中的静态方法,但是却报错了:Shared method not found: formatTime

JFinal

2017-03-05 01:07

@wang sharedMethod 扩展以后的用法是在表达式之中直接调用方法,例如:
#if(isBlank("abc"))...
其中的 isBlank 来自于 StringKit

除了要注意用法以后,要特别注意方法的参数个数与参数类型是否匹配,如果不匹配则会报出:Shared method not found 这个异常,这个异常确实报得不太友好,jfinal 3.1 已经改进了这里,会明确告知除了方法名可能错以外,方法的参数匹配不上也会报出来

jounzhang

2017-10-30 11:15

这个标题是不是应该更换一下了,enjoy指令集的扩展