Enjoy Template Engine 采用独创的 DKFF (Dynamic Key Feature Forward) 词法分析算法以及独创的DLRD (Double Layer Recursive Descent) 语法分析算法,极大减少了代码量,降低了学习成本,并提升了用户体验。
与以往任何一款 java 模板引擎都有显著的不同,极简设计、独创算法、极爽开发体验,从根本上重新定义了模板引擎,这里是首版发布时的盛况,传送门: JFinal 3.0 发布,重新定义模板引擎
Enjoy 模板引擎专为 java 开发者打造,所以坚持两个核心设计理念:一是在模板中可以直接与 java 代码通畅地交互,二是尽可能沿用 java 语法规则,将学习成本降到极致。
因此,立即掌握 90% 的用法,只需要记住一句话:JFinal 模板引擎表达式与 Java 是直接打通的。
本次 Enjoy 3.6 继续进行了增强与细致打磨,主要变化有:
#switch 指令特色之一是 #case 分支支持多参数:
#switch (month) #case (1, 3, 5, 7, 8, 10, 12) #(month) 月有 31 天 #case (2) #(month) 月平年有28天,闰年有29天 #default 月份错误: #(month ?? "null") #end
如上代码所示,#case 分支指令支持以逗号分隔的多个参数,这个功能就消解掉了 #break 指令的必要性,所以 enjoy 模板引擎是不需要 #break 指令的。
特色之二是 #case 参数支持任意表达式:
#case (a, b, x + y, "abc", "123")
上述代码中用逗号分隔的表达式先会被求值,然后再逐一与 #switch(value) 指令中的 value 进行比较,只要有一个值与其相等则该 case 分支会被执行。
#case 支持逗号分隔的多参数,从而无需引入 #break 指令,不仅减少了代码量,而且避免了忘写 #break 指令时带来的错误隐患。
使用 #call 指令,模板函数的名称与参数都可以动态指定,提升模板函数调用的灵活性,用法如下:
#call(funcName, p1, p2, ..., pn)
上述代码中的 funcName 为函数名,p1、p2、pn 为被调用函数所使用的参数。如果希望模板函数不存在时忽略其调用,添加常量值 true 在第一个参数位置即可:
#call(true, funcName, p1, p2, ..., pn)
放开 field 取值表达式对于 getField()、getMethod() 的调用
添加 removeForbidenClass 与 removeForbidenMethod 方法
ByteWriter.close()、CharWrite.close() 去掉 flush() 调用
添加 FieldGetter 抽象,可任意扩展 obj.field 表达式的取值方式
更多详情移步 enjoy 官方文档: https://www.jfinal.com/doc/6-1