velocity模板引擎杂记

匿名 (未验证) 提交于 2019-12-03 00:21:02
记录得很凌乱,反正这东西是给自己看的,建议有需要了解的道友,翻其他博客文档吧 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('')") ## 正确  注意方法作为参数传递的情况,会导致方法执行多次,避免方法为,外部先计算方法返回值,使用返回值作为参数   
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!