jetbrick-template-1.x 旧版文档请看这里:http://subchen.github.io/jetbrick-template/1x/

§表达式 Expression

支持几乎所有 Java 表达式 (based on Java 6.0),并对其进行了一些有用的扩展。

§1. 与 Java 相同的地方 (运算符优先级和 Java 保存一致)

提示: 方法调用支持可变参数方法(Varargs)和重载方法(Overload)

§2. 与 Java 不同的地方 (扩展语法/语义)

扩展语法:

扩展语义:

§3. 不支持的 Java 语法

§4. 变量名 Variable

可以是任意合法的 Java 变量名:

合法的变量名范例:user, user_name, userName

内置的特殊变量:

§5. List 常量

语法:

示例:

[] // empty List
[1, 2, 3, 4, 5]
["abc", 123, new Date(), 1+2*3]

取值:

${list[index]}
${list.get(index)}

§6. Map 常量

语法:

key 可以加单双引号,也可以不加 (和 JSON 一样)

示例:

{} // empty Map {name: "Jason", "statue": 0} 

取值:

${map.key}
${map["key"]}
${map.get("key")}

§7. Bean 属性调用 bean.property

Bean 属性默认会被解析成 getter 方法调用。

属性查找顺序,以 ${obj.foo} 为例:

  1. 查找 obj.getFoo() 方法
  2. 查找 obj.isFoo() 方法
  3. 查找 obj class 的 foo 字段
  4. 查找 map.get(name) 方法 (如果是 Map)
  5. 自定义的 Getter Resolver

§8. Bean 方法调用 bean.method(...)

示例:

${"Hello".substring(2)}
${"Hello".substring(2, 3)}

§9. 函数调用 function

jetbrick-template 还支持函数调用,如 ${now()}, ${fileGet("/test.txt")}

具体参考:扩展函数调用

§10. 静态字段调用 Class::Field

语法:

示例:

${Long::MAX_VALUE}
${java.lang.Long::MAX_VALUE}

§11. 静态方法调用 Class::method

语法:

示例:

${Collections::emptyList()}
${java.lang.Long::valueOf("123")}

§12. NULL 默认值

语法:

类似于 Freemarker 中的 ! 操作符,如果 expressionNULL,则返回 defaultValue

提示?! 支持级联操作,如果 obj.name 这样的表达式中 objNULL,即使 safecall=false 的情况下,同样不会抛出 NullPointerException

示例:

${status ?! 0}
${user.status ?! 0}  #// 如果 user==null, 同样会返回 0 (无需开启 safecall)