Beetl配置文件的其他元素

##方法

FN.isEmpty = org.beetl.ext.fn.EmptyExpressionFunction

##内置的功能包
FNP.strutil = org.beetl.ext.fn.StringUtil

##内置的格式化函数
FT.dateFormat =  org.beetl.ext.format.DateFormat

##内置的默认格式化函数
FTC.java.util.Date = org.beetl.ext.format.DateFormat
FTC.java.sql.Date = org.beetl.ext.format.DateFormat

FN:即方法。

在模板里面可以直接调用:如上所示的isEmpty()方法,调用如下:

@ if(isEmpty(aaa)){}

 这个方法实际上走的就是org.beetl.ext.fn.EmptyExpressionFunction.call()方法。查看源码可以得知,EmptyExpressionFunction实现自Function接口。function接口只有一个方法:

public interface Function
{

	public Object call(Object[] paras, Context ctx);

}

其中paras是参数,ctx是整个beetl的上下文,Object是返回值。

那么EmptyExpressionFunction就是这样简单的实现,判断参数paras[0]是否为null如果为null,则返回true,否则返回false(当然实际上不是这样简单的判断,但大致意思如此。)

那么在模板遇到isEmpty的时候就会调用EmptyExpressionFunction的call方法的。

根据这个原理,我们也可以写任意一个类来实现自Function,然后在beetl.properties里填写并注册进去。

FNP:工具类

很多时候,我们针对某种特殊处理并不只需要一个方法,如我们常用的StringUtils这个类,里面大约有好几个方法需要使用。难道我为了在beetl里使用这些功能,我要新建好几个function吗?并不是,你可以将一个类注册为FNP,那么就可以在beetl里使用了。

仔细看看beetl-default.properties他配置的FNP大概就知道怎么用的了。和FN差不多。

FT:格式化函数。

这个仔细查看,会发现,它和function方法差不多,但是它不是实现function接口,而是实现format接口。那么我们利用funcition来做到这个格式化功能行不行呢?

行,当然行,只是有个问题:

function接口里接参是用数组接参的,这个就类似于可变参数一样,是一种严重抽象和严重不规范的行为。

那么对于formart业务来说,实际上就需要两个参数:初始值和pattrn。

而formart就是两个参数,Object和pattrn。

所以作者应该是因此再来个formart接口来实现这种function的行为。

而且在模板里调用时也与function不同,如下:

${date,dateFormat="yyyy-MM-dd"}.

意思是:使用dateformat格式化函数,传入参数:(date,“yyyy-MM-dd”)

根据beetl-default.properties的记录,FT.dateformat = org.beetl.ext.format.DateFormat

所以,它执行的就是DateFormat.format(date,“yyyy-MM-dd”)

它的写法和function也不一样了。需要中间来个逗号,后面紧跟着format函数名以及另外一个参数。

FTC:默认格式化函数

${date,dateFormat="yyyy-MM-dd"}这种写法也实在是太繁琐了,那么作者可能根据各个方面的原因综合考虑吧,弄了一个默认格式化函数。

比如上面这个可以写成:${date,"yyyy-MM-dd"}

它是什么原理呢?

首先${}里是带逗号的,那么这就是一个格式化函数,

然后发现逗号后面省略了格式化函数名。那么就需要根据类型去推断是哪个格式化函数了。

检查date是个Java.util.date的类型的。

那么去beetl-default.properties配置里发现FNP下面Java.util.date对应的是org.beetl.ext.format.DateFormat,

于是便使用DateFormat来对其进行格式化。

所以如果要增加一些默认格式化函数,也可以这样增加。

 

 

 

你可能感兴趣的:(模板)