转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607935.aspx

VTL语法参考指南》中文版
 声明: 转载请保留此页声明
**************************************************************************
此文档为蓝杰实训学员拓展实训之用.
蓝杰实训不对译文中某些说法可能会对您的系统或开发造成损害负责.
如对您有所帮助,我们不胜荣幸!
*************************************************************************
本文属NetJava.cn中的Velocity中文系列,本系包含如下文章:
《Velocity Java开发指南中文版》(Developer`s Guide)
《Velocity模板使用指南中文版》(User`s Guide)
《Velocity Web应用开发指南中文版》(Web Application Guide)
《VTL语法参考指南中文版》(VTL Reference)
《DB4O中文系列之起步篇》
 . . .
 更多资料请访问http://www.netjava.cn/ 下载.
**************************************************************************
译者: javaFound
*************************************************************************
Velocity(www.velocity.apache.org)通常用来替换JSP技术. 使用它生成页面有以下优势:
·         简洁–一般的web美工不需要懂程序语言的就可以设计动态业面.
·         Web系统容易维护– MVC推荐的做法是在页面中不要存在其它的脚本语言出现..
·         容易访问数据模型的命令和属性–页面设计者通过引用简单的就可访问context中的java数据对象.
·         一致性– Velocity可用做其它的文本模板生成任务,如如发送email.
本系列全面讲解了将Velocity应用从入门到精通其技术特点应用的每个方面,助你成为MVC构架的高手.
 
  
 
1.关于本指南
本文为Velocity的模板语言参考书,如需了解更多信息,请参见 Velocity User Guide.
2.语法参考
1.变量定义
变量名的有效字符集:
$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]
Examples:
  • 一般方式: $mud-Slinger_9
  • 静态(输出原始字面): $!mud-Slinger_9
  • 正规格式: ${mud-Slinger_9}
2.访问属性
格式规则:
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ]
Examples:
  • 一般格式: $customer.Address :调用customer对象的getAddress()命令.
  • 正规格式: ${purchase.Total}
3.命令调用
格式规则:
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list... ] ) [ } ]
Examples:
  • 一般写码: $customer.getAddress()
  • 正规写法: ${purchase.getTotal()}
  • 传入调用参数: $page.setTitle( "My Home Page" )
VTL的属性调用可以理解为命令调用的简写方式,一般会调用对象的get/set命令.
3.动作指令
1.#set – 建立变量对值的引用
格式规则:
# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )
Examples:
  • 变量引用: #set( $monkey = $bill )
  • 引用原始字符串: #set( $monkey.Friend = 'monica' )
  • 属性引用: #set( $monkey.Blame = $whitehouse.Leak )
  • 命令引用: #set( $monkey.Plan = $spindoctor.weave($web) )
直接引用数字: #set( $monkey.Number = 123 )
  • 列表赋值引用: #set( $monkey.Numbers = [1..3] )
  • 对象数组: #set( $monkey.Say = ["Not", $my, "fault"] )
右值也可以做为一个表达式出现,如下加,减,cheng,除和取模:
  • Addition: #set( $value = $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 – 如果是boolean型,根据true或false决定,否则非null时认为是true.
  • output –可以包含VTL的输出内容.
Examples (showing different operators):
Symbol
Example
==
#if( $foo == 42 )
==
#if( $foo == "bar" )
==
#if( $foo == $bar )
!=
#if( $foo != $bar )
>
#if( $foo > 42 )
<
#if( $foo < 42 )
>=
#if( $foo >= 42 )
<=
#if( $foo <= 42 )
!
#if( !$foo )
注意:
  1. “== “操作可以用来比较数字,字符串,或同一个类的不同对象或不同类型的对象. 当是不同类的对象时,会调用它们的toString()命令结果来做比较看是否相等.
  2. 也可以如下用法,但注意else处,用{}括起.
#if( $foo == $bar)it's true!#{else}it's not!#end</li>
3.#foreach---使用循环通过列表迭代对象
Format:
# [ { ] foreach [ } ] ($refinarg)statement# [ { ] end [ } ]
Usage:
  • $ref – 引用的要迭代的对象.
  • arg – 可能是:一个列表引用 (i.e. object array, collection, or map), an array list, 或其它列表.
  • statement – 当velocity发现下一个有效对像在列表中,输出可以是一个合法的VTL.
示例 #foreach()用法,:
  • 引用: #foreach ( $item in $items )
  • 数组列表: #foreach ( $item in ["Not", $my, "fault"] )
  • 根据设定的界限: #foreach ( $item in [1..3] )
如下可以取得循环次数的当前值:
<table>
#foreach( $customer in $customerList )
    <tr><td>$velocityCount</td><td>$customer.Name</td></tr>
#end
</table>
默认的循环次数的引用变量名为 $velocityCount. 可以在配置文件velocity.properties中做如下修改成你想要的:
# 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.maxloops = -1
4.#include – 在模板中引入本地文件,不用Velocity解析这个文件
Format:
# [ { ] include [ } ] ( arg[ arg2 ... argn] )
  • arg – 目录TEMPLATE_ROOT下面的有效文件名.
Examples:
  • 直接写文件名: #include( "disclaimer.txt,"opinion.txt" ):如有多个文件时用逗号分开
  • 使用变量引用的文件名: #include( $foo,$bar )
5.#parse – 在模板引用处使用Velocity解析另一个模板输出
Format:
# [ { ] 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 – 让用户可以定义宏操作(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. Inline: 放入到一般的模板文件中, 仅当配置参数 velocimacro.permissions.allowInline=true 时生效.
4.Comments 注解
Comments不是运行时所必须的,但你一定要写.
1.单行注解
Example:
## This is a comment.
2.多行注解
Example:
#*
This is a multiline comment.
This is the second line
*#
5.Feedback

《VTL语法参考指南》中文版[转]的更多相关文章

  1. Nmap参考指南中文版

    Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...

  2. Spring Data JPA 参考指南 中文版

    附下载地址:https://www.gitbook.com/book/ityouknow/spring-data-jpa-reference-documentation/details

  3. Java1.5泛型指南中文版(Java1.5 Generic Tutorial)

    Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 英文版pdf下载链接:http://java.sun.com/j2se/1.5/pdf/generics-tutori ...

  4. Google C++编程风格指南 - 中文版

    Google C++编程风格指南 - 中文版 from http://code.google.com/p/google-styleguide/ 版本: 3.133原作者: Benjy Weinberg ...

  5. 来自HeroKu的HTTP API 设计指南(中文版)

    原文转自:http://get.jobdeer.com/343.get 来自HeroKu的HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国内 ...

  6. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  7. APP store 上架过程中碰到的那些坑&被拒的各种奇葩原因整理&审核指南中文版

    苹果官方发布的十大常见被拒原因 1.崩溃次数和Bug数量.苹果要求开发者在将应用提交给App Store之前彻查自己的应用,以尽量避免Bug的存在. 2.链或错误的链接.应用中所有的链接必须是真实且有 ...

  8. ANTLR3完全参考指南读书笔记[01]

    引用 Terence Parr. The Definitive ANTLR Reference, Building Domain Specific Languages(antlr3 version). ...

  9. Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)

    he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, morgan@linux.kernel.org翻译:孙国清(Thomas Sun),thomassun@yeah.ne ...

随机推荐

  1. Android学习笔记1:Activity与View

    推荐一系列优秀的Android开发源码 Activity是Android应用中负责与用户交互的组件. View组件是所有UI控件.容器控件的基类,View组件就是Android应用中用户实实在在看到的 ...

  2. c语言的label后面不能直接跟变量申明

    ; goto JUMP; printf("x is : %d\n",x); JUMP: ; <=== 错误,lable后面不能申明变量,只能是表达式语句(statement) ...

  3. pci转并口卡的安装使用

    pci转并口卡模拟出来的并口并不能完全等同于主板上真正的并口.真正的并口打印的时候可以“直接瓶口输出”打印,而不需要安装打印驱动程序. 这个模拟出来的并口却不能使用“直接瓶口输出”(打印机不打印,程序 ...

  4. Staitic(静态) 相关知识点介绍

    一.什么是 Static? Static 关键字:表明一个成员变量或者是成员方法可以在没有所属的类的实例的情况下直接被访问 当成员被静态修饰后,就多了一个调用方式,除了可被对象调用外还可以直接被类名调 ...

  5. java接口相关例题

    java接口相关习题 interface Graphics{  //接口里面只能用抽象方法  public abstract double area();    }//设置 平面类class Plan ...

  6. ListView simpleAdapter的基本使用

    使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行.HashMap的每个键 值数据映射到布局文件中对应id的组件上.因为系统没有对 ...

  7. FAQs: 我们可以在那里来为我的没有提升管理权限的应用程序存储用户数据?

    如果你正在写一个不需要管理员权限的应用程序,如写一个业务线应用(Line of Business,LOB),用户应用程序如游戏,你总是要把应用程序的数据写到一个标准用可以访问的目录.下面列出一些所推荐 ...

  8. Linux下git的配置

    需求和环境 硬件:一台装有Ubuntu14.04的PC 软件:git-core.openssh-server.openssh-client Git的安装 sudo apt-get install gi ...

  9. 用bootstrap的tab插件做一个图层切换效果(感觉会误导淫们,大家当乐子看吧)

    小伙伴们啊,我JS真的是个渣渣,所以总想要偷懒,于是为了实现效果就把tab插件给改了(各位大神轻拍啊,我是小白,很纯洁滴,小心脏也很脆弱)…… 最近做的项目为了考虑以后的移动设备兼容性,所以用了Boo ...

  10. javascript 中状态改变触发事件

    转 有限状态机:是一个非常有用的模型,可以模拟世界上大部分事物. 它有三个特征: * 状态总数(state)是有限的. * 任一时刻,只处在一种状态之中. * 某种条件下,会从一种状态转变(trans ...