@mrbourne
2017-03-15T01:03:35.000000Z
字数 3192
阅读 1895
Jfinal
<!--实验--><!--静态变量访问-->#if(x.status == com.jfinal.clud.common.model.Account::STATUS_NORMAL)<span>正常</span>#end<!--静态方法点调用-->#if(com.jfinal.common.kit.StrKit::notBlank(title))...#end<!--共享静态方法-->#if(isNotBlank(x.status))...#end<!--空合与安全取值-->seoTitle ?? "Jfinal 社区"object.field ?? 空安全取值 object为null时不报异常,为nullobject.method ?? 空安全方法 object为null时不报异常object.field ?? "Jfinal"object.method ?? "null"<!--单引号字符串--><a href="/" class="#(menu == 'index' ? 'current' : 'normal')">首页</a><!--相等于不等比较-->#if(nickName == "james")#end#if(nickName != "james")#end<!--布尔表达式增强-->#if(loginAccount && loginAccount.id == x.accountId)<a onclick="deleteReply(this, '/feedback/deleteReply?id=#(x.id)')">删除</a>#end<!--范围数组定义表达式-->#for(x : [1..10])#(x)#end<!--Map定义表达式-->#set(map = {k1: 123, "k2": "abc", 'k3': object})#(map.k1)#(map.k2)#(map["k1"])#(map["k2"])<!--逗号表达式-->#(1+1, 3*4)<!--核心指令-->#if#for#set#include#define#(...)<!--输出指令-->#(value)#(object.field) #-- 可能报异常--##(object.field ??)#(a > b ? x : y)#(seoTitle ?? "Jfinal Club")#(obj.method, null) #-- 逗号表达式为最后一个表达式的值,这里是null 不做输出,这里相当于只是调用了obj.method()--#<!--if指令-->#if(cond)...#end#if(c1)...#elseif(c2)...#elseif(c3)...#else...#end<!--for指令-->#for(x : list)#(x.field)#end#for(x : map)#(x.key)#(x.field)#end#for(x : listAaa)#(for.index) #-- 外层循环下标--##(x.field)#for(x : listBbb)#(for.outer.index) #--外层(上一层)循环下标--##(for.index) #--内层循环下标--##(x.field)#end#end#for(x : listAaa)#(for.size)#(for.index) #--从0开始的下标值--##(for.count) #--从1开始的计数值--##(for.first) #--是否为第一次迭代--##(for.last) #--是否为最后一次迭代--##(for.odd) #--是否为奇数次迭代--##(for.even) #--是否为偶数次迭代--##(for.outer) #--引用上层for指令状态--##end#for(blog : blogList)#(blog.title)#else #--迭代次数为0时--#您还没写过博客#end#for(i = 0; i < 100; i++)#(i)#end<!--set指令-->#set(x = 123)#set(a = 1. b = 2, c = a + b)#set(array[0] = 125)#set(map.key = 456)#(x) #(a) #(array[0]) #(map.key)<!--include指令-->#include("../_inc/_sidebar.html")<!--define指令-->#define layout() #--定义了一个名为layout的模板函数--#<html>#@content() #--调用一个名为content的模板函数--#</html>#end#include("layout.html")#@layout #--调用layout.html中定义的layout()模板函数--##define content()<div>这里是模板内容</div>#end#define test(a, b, c)#(a)#(b)#(b)#end#@test(123, "abc", user.name)<!--模板函数调用-->#@name?(p1,p2,p3) #--安全调用:当模板函数未定义或找不到时不做任何操作--#<!--实验 end-->
代码示例:
public class Now extends Directive{@Overridepublic void exec(Env env, Scope scope, Writer writer) {write(writer, new Date().toString());}}使用前需要在configEngine中添加:me.addDirective("now", new Now()); //将指令添加到模板引擎今天的日期是 #now
public class Demo extends Directive{//ExprList 代表指令参数表达式列表@Overridepublic void setExprList(ExprList exprList) {super.setExprList(exprList);//这里可以对 exprlist进行个性化控制}@Overridepublic void exec(Env env, Scope scope, Writer writer) {write(writer, "body执行前");stat.exec(env, scope, writer); //执行bodywrite(writer, "body执行后");}@Overridepublic boolean hasEnd() {return true;}}一样使用前需要 configEngine中添加:me.addDirective("demo", new Demo());使用时:#demo()这里是body#end结果:body执行前这里是bodybody执行后
engine.addSharedMethod(new com.jfinal.kit.StrKit());
调用
#if(isBlank(nickName))...#end
public void configEngine(Engine engine){engine.addSharedObject("RESOURCE_HOST", "http://res.jfinal.com");engine.addSharedObjcet("sk", new com.jfinal.kit.StrKit());}
使用
<img src="#(RESOURCE_HOST)/img/hannah.jpg/>"#if(sk.isBlank(title))...#end
### 这里是单行注释#--这里是多行注释这里是多行注释--#
#[[#(value)#for(i : [1..10])]]#
可以直接输出以上的代码