1、 领先的 java 与.Net 技术推广者www.NetJ 1VTL 语法参考指南 中文版源文见 http:/velocity.apache.org *声明: 转载请保留此页声明译者: javaFound www.NMail: *目 录1.关于本指南 .32.语法参考 .31.变量定义 .32.访问属性 .3命令调用 .33.动作指令 .31.#set 建立变量对值的引用 .32.#if/#elseif/#else-条件判断 .43.#foreach-使用循环通过列表迭代对象 .54.#include 在模板中引入本地文件,不用 Velocity解析这个文件 .55.#parse 在模板引用处
2、使用 Velocity解析另一个模板输出 .66.#stop 中断模板解析 .67.#macro 让用户可以定义宏操作(Velocimacro (VM):一组实现特定功能的 VTL)64.Comments 注解 .71.单行注解 .72.多行注解 .75.Feedback.7领先的 java 与.Net 技术推广者www.NetJ 21.关于本指南本文为 Velocity的模板语言参考书,如需了解更多信息,请参见 Velocity User Guide. 2.语法参考1.变量定义变量名的有效字符集: $ ! az, AZ az, AZ, 09, -, _ Examples: 一般方式: $mu
3、d-Slinger_9 静态(输出原始字面): $!mud-Slinger_9 正规格式: $mud-Slinger_92.访问属性格式规则: $ az, AZ az, AZ, 09, -, _ * .az, AZ az, A-Z, 09, -, _ * Examples: 一般格式: $customer.Address :调用 customer对象的 getAddress()命令. 正规格式: $purchase.Total3.命令调用格式规则: $ az, AZ az, AZ, 09, -, _ * . az, AZ az, AZ, 09, -, _ *( optional paramet
4、er list. ) Examples: 一般写码: $customer.getAddress() 正规写法: $purchase.getTotal() 传入调用参数: $page.setTitle( “My Home Page“ )VTL的属性调用可以理解为命令调用的简写方式,一般会调用对象的 get/set命令. 3.动作指令1.#set 建立变量对值的引用格式规则:# set ( $ref = “, arg “, ) 领先的 java 与.Net 技术推广者www.NetJ 3Examples: 变量引用: #set( $monkey = $bill ) 引用原始字符串: #set( $
5、monkey.Friend = monica ) 属性引用: #set( $monkey.Blame = $whitehouse.Leak ) 命令引用: #set( $monkey.Plan = $spindoctor.weave($web) )直接引用数字: #set( $monkey.Number = 123 ) 列表赋值引用: #set( $monkey.Numbers = 13 ) 对象数组: #set( $monkey.Say = “Not“, $my, “fault“ )右值也可以做为一个表达式出现,如下加,减,cheng,除和取模: Addition: #set( $value
6、 = $foo + 1 ) Subtraction: #set( $value = $bar - 1 ) Multiplication: #set( $value = $foo * $bar ) Division: #set( $value = $foo / $bar ) Remainder: #set( $value = $foo % $bar )2.#if/#elseif/#else-条件判断格式规则:# if ( 条件表达式 ) 输出内容 # elseif ( condition ) output * # else output # end Usage: condition 如果是 bo
7、olean型,根据 true或 false决定,否则非 null时认为是 true. output 可以包含 VTL的输出内容.Examples (showing different operators): Operator Name Symbol Alternative Symbol ExampleEquals Number = eq #if( $foo = 42 )Equals String = eq #if( $foo = “bar“ )Object Equivalence = eq #if( $foo = $bar )Not Equals != ne #if( $foo != $bar
8、 )Greater Than gt #if( $foo 42 )Less Than = ge #if( $foo = 42 )Less Than or Equal To 3.#foreach-使用循环通过列表迭代对象Format: # foreach ( $ref in arg ) statement # end Usage: $ref 引用的要迭代的对象. arg 可能是:一个列表引用 (i.e. object array, collection, or map), an array list, 或其它列表. statement 当 velocity发现下一个有效对像在列表中,输出可以是一个
9、合法的 VTL. 示例 #foreach()用法,: 引用: #foreach ( $item in $items ) 数组列表: #foreach ( $item in “Not“, $my, “fault“ ) 根据设定的界限: #foreach ( $item in 13 )如下可以取得循环次数的当前值: #foreach( $customer in $customerList )$velocityCount$customer.Name#end默认的循环次数的引用变量名为 $velocityCount. 可以在配置文件 velocity.properties中做如下修改成你想要的: #
10、Default name of the loop counter# variable reference.directive.foreach.counter.name = velocityCount# Default starting value of the loop# counter variable reference.directive.foreach.counter.initial.value = 1注意,可以对所有可循环的次数加一个最大值来控制,默认的是-1,表示元限制: # The maximum allowed number of loops.directive.foreach
11、.maxloops = -14.#include 在模板中引入本地文件,不用 Velocity解析这个文件Format: # include ( arg arg2 . argn ) arg 目录 TEMPLATE_ROOT下面的有效文件名.领先的 java 与.Net 技术推广者www.NetJ 5Examples: 直接写文件名: #include( “disclaimer.txt,“opinion.txt“ ):如有多个文件时用逗号分开 使用变量引用的文件名: #include( $foo,$bar )5.#parse 在模板引用处使用 Velocity解析另一个模板输出Format: #
12、 parse ( arg ) arg -目录 TEMPLATE_ROOT下面的有效文件名.Examples: 直接写文件名: #parse( “lecorbusier.vm“ ) 使用变量引用的文件名: #parse( $foo )通过设置配置中的解析层次深度的最大值 velocity.properties中项 parse_directive.maxdepth in可以防止死循环. (The default parse depth is 10.) 6.#stop 中断模板解析Format: # stop Usage: 在当前模板指令处停止解析,为方便调试用. 7.#macro 让用户可以定义宏
13、操作(Velocimacro (VM):一组实现特定功能的 VTL)Format: # macro ( vmname $arg1 $arg2 $arg3 . $argn ) VM VTL code. # #end vmname 宏名字 VM ( #vmname) $arg1 $arg2 . 要传给宏的参数 VM VM VTL code. 宏代码,有效的 VTL.一次定义好了,就可以在其它模板的任何地方使用宏指令来应用. #vmname( $arg1 $arg2 )宏(VM)可以写在以下两个地方: 1. (模板库 )Template library: 可以配置用户定义的库以便全站使用2. Inl
14、ine: 放入到一般的模板文件中, 仅当配置参数 velocimacro.permissions.allowInline=true 时生效.领先的 java 与.Net 技术推广者www.NetJ 64.Comments 注解Comments不是运行时所必须的,但你一定要写. 1.单行注解Example: # This is a comment. 2.多行注解Example: #*This is a multiline comment.This is the second line*# 5.Feedback如果您有什么问题或建议,请联系 Velocity developers list. Thanks!