转自: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. [LeetCode] 42. Trapping Rain Water 解题思路

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  2. CentOS 7下安装xampp和testlink

    记录一下最近安装testlink的经历,供大伙儿参考,有问题可以留言讨论,这里就不截图了 先说下安装版本: CentOS-7.0-1406-x86_64-DVDxampp-linux-1.8.3-5- ...

  3. 解决@media screen (自适应)IE浏览器不兼容问题

    1.解决兼容性问题 (1)页面最顶部必须定义:<!DOCTYPE html> (2)点击:下载 respond.js 文件 (3)引入<script src="respon ...

  4. Stackdump: 一个可以离线看stackoverflow的工具

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Stackdump: 一个可以离线看stackoverflow的工具.

  5. jetty服务器

    1,http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin 2,http://wiki.eclipse.org/Jetty#Getting_S ...

  6. How to easily concatenate text based on criteria in Excel? 如何将Excel中的文本按条件合并

    To combine text with the unique ID numbers, you can extract the unique values first and then create ...

  7. Android时间互换代码

    收藏备用. http://www.oschina.net/code/snippet_575610_22694 /** * 获取现在时间 * * @return 返回时间类型 yyyy-MM-dd HH ...

  8. PureMVC(JS版)源码解析(五):SimpleCommand类

          之前我们对PureMVC中涉及到观察者模式的三个基本类(Notification/Observer/Notifier)进行了分析,接下来将对PureMVC源码中的其他类进行分析,首先我们讲 ...

  9. Linux学习笔记总结--CentOS 设置静态IP

    1.修改网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth ...

  10. 今天给大家分享一下Android中的资源与国际化的问题

    摘要:该文章将向大家分享Android中的资源与国际化的问题. 今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layo ...