velocity模板引擎杂记

记录得很凌乱,反正这东西是给自己看的,建议有需要了解的道友,翻其他博客文档吧
http://velocity.apache.org/engine/devel/user-guide.html
http://ifeve.com/apache-velocity-dev/

## set指令
## 用“指令”这个词可能不太准确
#set($a = "Velocity")

## $取#set($foo = "Velocity")
Hello $foo World

## 单行注释
#*
多行注释
*#

VTL中有三种引用
变量variable、属性properties、方法methods
合法变量名:字母、数字、连字符、下划线,以字母开头
属性访问方式:$customer.Address$purchase.Total
方法调用方式:$person.setAttributes(["Strange"])
使用属性更简洁,使用方法可以传递参数

正式reference标记
在非正式语句$vice中不便取值时考虑用正式reference标记${vice}

空白处理
$!email
$!{email}

转义处理
#set($email = "foo")
\\\$email
=> \$email

#set($foo = "gibbous")
$moon = $foo
=> $moon = gibbous
## 因为$moon并没有使用#set指令,等号也不是在赋值环境中,所以没有把$moon视为一个变量,也没有把等号视为赋值

## 语法简写
属性(解释为对应get方法而不是同名属性)=>方法=>get方法
$foo.getBar()等同于$foo.Bar
$data.User("jon")等同于$data.getUser("jon")
${data.Request.ServerName}等同于$data.Request.ServerName等同于$data.getRequest().getServerName()

#set($customer.Behavior = $primate)
set指令左边必定是变量或者属性
右边必定是变量、字符串、属性、方法、数字、数组、简单算术表达式
注意数组取值:$arr.get(0)
注意右边方法返回null的时候,将指向一个已经存在的reference
如:#set($result = $query.getName("return jock"))
$result
#set($result = $query.getName("return null"))
$result
结果将会是:
jock
jock
也就是说set指令右边返回的null是不会覆盖原来的值的
这可能会在for循环中导致下次循环受上次循环影响,解决方法是循环开始后马上赋一个默认值,覆盖上次循环的值
注意set指令不存在结束标记end
set指令赋值字符串的时候可以使用单引号也能使用双引号,区别在于双引号中可以使用表达式取值,单引号中的取值语句不会被解析

if指令
已知null视为false,待测试返回空串或者数值0的情况
比较数值的时候还要求两边的值,类型相同,不存在JS中的默认转换

与或非
使用的是短路与&&、短路或||、!

foreach指令
#foreach($x in $xs)
    ## 默认从1开始
    $velocityCount
#end

include指令
必须存在于TEMPLATE_ROOT目录下
#include("file1","file2",$file3)

parse指令
与include类似,区别在于一个文件中有使用次数限制,默认10,可以递归包含

stop指令
停止执行模板引擎并立即返回,开发调试中用的比较多

macro指令
定义可复用的模板代码,类似组件化
可以实现行内定义也可以定义在Velocimacros模板库中
可以将方法调用作为参数

语法缩进
这貌似是一个跟tab/space,2space/4space类似的圣战问题
个人喜欢在html缩进不变的前提下,尽量与标签平级的格式

算术函数
+-*/%默认返回整形,其它数据类型将作为null

范围指令
[1...5] 只能在set/foreach指令中使用

转移符\(为啥作者翻译为逃逸符)
对$符号!符号无用
如\$foo
=> \$foo

杂记
指令嵌套?不允许,但是可以嵌套另一个指令字符串如
#center(#bold("")) ## 错误
#center("#bold('')") ## 正确

注意方法作为参数传递的情况,会导致方法执行多次,避免方法为,外部先计算方法返回值,使用返回值作为参数


猜你喜欢

转载自blog.csdn.net/just_fight_/article/details/80455237