| 接口 | 说明 |
|---|---|
| CaseSetter |
CaseSetter
|
| 类 | 说明 |
|---|---|
| Break |
Break
java 中 break、continue 可出现在 for 中的最后一行,不一定要套在 if 中
|
| Call |
Call 调用模板函数,两种用法:
1:常规调用
#@funcName(p1, p2, ..., pn)
2:安全调用,函数被定义才调用,否则跳过
#@funcName?
|
| Case |
Case
|
| Continue |
Continue
|
| Default |
Default
#switch 指令内部的 #default 指令
|
| Define |
Define 定义模板函数:
#define funcName(p1, p2, ..., pn)
body
#end
模板函数类型:
1:全局共享的模板函数
通过 engine.addSharedFunction(...)
|
| Else |
Else
|
| ElseIf |
ElseIf
|
| For |
For 循环控制,支持 List、Map、数组、Collection、Iterator、Iterable
Enumeration、null 以及任意单个对象的迭代,简单说是支持所有对象迭代
主要用法:
1:#for(item : list) #(item) #end
2:#for(item : list) #(item) #else content #end
3:#for(i=0; i<9; i++) #(item) #end
4:#for(i=0; i<9; i++) #(item) #else content #end
|
| ForEntry |
ForEntry 包装 HashMap、LinkedHashMap 等 Map 类型的 Entry 对象
|
| ForIteratorStatus |
ForIteratorStatus
封装 #for( id : expr) 迭代语句状态,便于模板中获取
使用以下表达式可以模板中获取迭代状态:
for.size 被迭代集合元素数量,不支持 Iterator 与 Iterable
for.index 从 0 下始的下标
for.count 从 1 开始的计数器
for.first 是否第一个元素
for.last 是否最后一个元素
for.odd 是否第奇数个元素
for.even 是否第偶数个元素
for.outer 获取外层 for 对象,便于获取外层 for 循环状态
例如: for.outer.index
|
| ForLoopStatus |
ForLoopStatus
封装 #for( init; cond; update) 循环的状态,便于模板中获取
如下表达式可从模板中获取循环状态:
for.index 从 0 下始的下标
for.count 从 1 开始的计数器
for.first 是否第一个元素
for.odd 是否第奇数个元素
for.even 是否第偶数个元素
for.outer 获取外层 for 对象,便于获取外层 for 循环状态
例如: for.outer.index
注意:比迭代型循环语句少支持两个状态取值表达式:for.size、for.last
|
| If |
If
|
| Include |
Include
1:父模板被缓存时,被 include 的模板会被间接缓存,无需关心缓存问题
2:同一个模板文件被多个父模板 include,所处的背景环境不同,例如各父模板中定义的模板函数不同
各父模板所处的相对路径不同,所以多个父模板不能共用一次 parse 出来的结果,而是在每个被include
的地方重新 parse
两种用法:
1:只传入一个参数,参数必须是 String 常量,如果希望第一个参数是变量可以使用 #render 指令去实现
#include("_hot.html")
2:传入任意多个参数,除第一个参数以外的所有参数必须是赋值表达式,用于实现参数传递功能
#include("_hot.html", title = "热门新闻", list = newsList)
上例中传递了 title、list 两个参数,可以代替父模板中的 #set 指令传参方式
并且此方式传入的参数只在子模板作用域有效,不会污染父模板作用域
这种传参方式有利于将子模板模块化,例如上例的调用改成如下的参数:
#include("_hot.html", title = "热门项目", list = projectList)
通过这种传参方式在子模板 _hot.html 之中,完全不需要修改对于 title 与 list
这两个变量的处理代码,就实现了对 “热门项目” 数据的渲染
|
| NullStat |
NullStat
|
| Output |
Output 输出指令
用法:
1:#(value)
2:#(x = 1, y = 2, x + y)
3:#(seoTitle ??
|
| Return |
Return
通常用于 #define 指令内部,不支持返回值
|
| ReturnIf |
#returnIf(expr) 指令,当 expr 为 true 时返回,等价于:
#if (expr)
#return
#end
|
| Set |
Set 赋值,从内向外作用域查找变量,找到则替换变量值,否则在顶层作用域赋值
用法:
1:#set(k = v)
2:#set(k1 = v1, k2 = v2, ..., kn = vn)
3:#set(x = 1+2)
4:#set(x = 1+2, y = 3>4, ..., z = c ?
|
| SetGlobal |
SetGlobal 设置全局变量,全局作用域是指本次请求的整个 template
适用于极少数的在内层作用域中希望直接操作顶层作用域的场景
|
| SetLocal |
SetLocal 设置局部变量
通常用于 #define #include 指令内部需要与外层作用域区分,以便于定义重用型模块的场景
也常用于 #for 循环内部的临时变量
|
| Stat |
Stat
|
| StatList |
StatList
|
| Switch |
Switch
#switch 指令与 Java 12 switch 新特性的设计相似: http://openjdk.java.net/jeps/325
在与 java 老版本指令基本用法相同的基础上,主要变化与特性有:
1: 移除 java 语法中的 fall-through semantics,即不需要 break 关键字进行断开
2: 不引入 #break 指令,代码更少、更优雅
3: #case 参数可使用多个用逗号分隔的表达式,每个表达式求值后与 #switch 参数求值后比较,
从根本上消除了 #break 指令的必要性
4: #case 支持任意类型数据与表达式(java 语言只支持少数常量类型)
示例:
#switch (month)
#case (1, 3, 5, 7, 8, 10, 12)
#(month) 月有 31 天
#case (2)
#(month) 月平年有28天,闰年有29天
#default
月份错误: #(month ??
|
| Text |
Text 输出纯文本块以及使用 "#[[" 与 "]]#" 定义的原样输出块
|
Copyright © 2024. All rights reserved.