1.表达式
* 算术运算: + - * / % ++ --
* 比较运算: > >= < <= == != (基本用法相同,后面会介绍增强部分)
* 逻辑运算: ! && ||
* 三元表达式: ? :
* Null 值常量: null
* 字符串常量: "jfinal club"
* 布尔常量:true false
* 数字常量: 123 456F 789L 0.1D 0.2E10
* 数组存取:array[i] (Map被增强为额外支持 map[key]的方式取值)
* 属性取值:object.field (Map被增强为额外支持map.key 的方式取值)
* 方法调用:object.method(p1, p2…, pn) (支持可变参数)
* 逗号表达式:123, 1>2, null, "abc", 3+6 (逗号表达式的值为最后一个表达式的值)
* 模板安全调用: ? // #@name ? (p1, p2…, pn) (指当模板函数未定义时不做任何操作)
2.方法调用 :#()
#("ABCDE".substring(0, 3))
#(girl.getAge())
#(list.size())
#(map.get(key))
3.空合并安全取值调用操作符,设置默认值
seoTitle ?? "默认值"
object.field ??
object.method() ??
特别注意:
?? 操作符的优先级 高于数学计算运算符:+、-、*、/、%,
低于单目运算符:!、++、–
例如:
a.b ?? && expr === (a.b ??) && expr
#if(user && user.id == x.userId) ==> if (user.id ?? == x.userId)
4.定义表达式
// map 定义取值
#set(map = {k1:123, "k2":"abc", "k3":object})
#(map.k1)、#(map.k2)、#(map["k1"])、#(map["k2"])、#(map.get("k1"))
#({1:'自买', 2:'跟买'}.get(1))
// 数组定义取值
#set(array = [123, "abc", true])
#(array[1])、#(array[1] = false, array[1])
// 范围数组定义
#for(x : [1..10])
#(x)
#end
5.逗号表达式 : 输出最后一位数值
1+2, 3*4 // 12
6.指令
1.输出指令: #()
2.#if
#if(c1)
...
#else if(c2)
...
#else
...
#end
3.#for
#for(x : list)
#(x.field)
#else
for指令迭代次数为0时默认输出
#end
4.#switch
#switch (month)
#case (1, 3, 5, 7, 8, 10, 12)
#(month) 月有 31 天
#case (2)
#(month) 月平年有28天,闰年有29天
#default
月份错误: #(month ?? "null")
#end
5.#set:set指令只接受赋值表达式,以及用逗号分隔的赋值表达式列表
#set(x = 123)
#set(a = 1, b = 2, c = a + b)
#set(map["key"] = 456)
6.#include:将外部模板内容包含进来,被包含的内容会被解析成为当前模板中的一部分进行使用
#include("sidebar.html")
7.#render: #render(temp:任何表达式)
8.#define: #define name()
9.模板引用: #@name()
10.#call:
#call(funcName, p1, p2, ..., pn)
#call(true, funcName, p1, p2, ..., pn) // 模板函数不存在时忽略其调用
11.#date
#date(account.createAt)
#date(account.createAt, "yyyy-MM-dd HH:mm:ss")
12.#number
#number(3.1415926, "#.##")
#number(0.9518, "#.##%")
#number(300000, "光速为每秒,### 公里。")
13.#escape : 转义, 小于号转义成:<
#escape(blog.content);
7.注释
### 这里是单行注释
#--
这里是多行注释的第一行
这里是多行注释的第二行
--#
版权声明:本文为zjl199303原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。