关于这个指南

这个指南是针对Velocity模版语言(VTL)的说明。更多其它的信息,请参考Velocity用户指南(http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html)。

说明

变量

表达式:

$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]

示例:

  • 速记表达式:$mud-Slinger_9
  • 速记表达式:$!mud-Slinger_9
  • 正规表达法:${mud-Slinger_9}
  • 正规表达法:$!{mud-Slinger_9}

属性

表达式:

$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ]

示例:

  • 合法的表达式:$customer.Address
  • 正规的表达式:${purchase.Total}

方法

表达式:

$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list... ] ) [ } ]

示例:

  • 合法的表达式:$customer.getAddress()
  • 正规的表达式:${purchase.getTotal()}
  • 带参数列表的合法表达式:$page.setTitle("My Home Page")

VTL属性可以使用取出set和get的速记表达式方式,$object.getMethod()或者$object.setMethod()都可以缩写成$object.Method,允许的情况下,一般都是比较喜欢写成属性的表达式方式。属性和方法主要的区别就在于方法可以有一个带参数的列表。

命令

#set - Establishes the value of a reference

格式:

# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )

使用:

  • $ref -
  • arg -

示例:

  • 变量:#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"] )
  • Map:#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"})

RHS也可以是一个表达式,比如:

  • 加法:#set( $value = $foo + 1 )
  • 减法:#set( $value = $bar - 1 )
  • 乘法:#set( $value = $foo * $bar )
  • 除法:#set( $value = $foo / $bar )
  • 取余:#set( $value = $foo % $bar )

#if/#elseif/#else - Output conditional on truth of statements

格式:

# [ { ] if [ } ] ( [condition] ) [output] [ # [ { ] elseif [ } ] ( [condition] ) [output] ]* [ # [ { ] else [ } ] [output] ] # [ { ] end [ } ]

使用:

  • 条件:如果是boolean类型,considered true if it has a true false;如果不是boolean类型,如果不为null则为true
  • 输出:包含VTL

示例:

操作名

符号

可选符号

示例

数字等于

==

eq

#if($foo == 42)

字符等于

==

eq

#if($foo == 'bar')

对象相等

==

eq

#if($foo == $bar)

不等

!=

ne

#if($foo != $bar)

大于

>

gt

#if($foo > 42)

小于

<

lt

#if($foo < 42)

大于等于

>=

ge

#if($foo >= 42)

小于等于

<=

le

#if($foo <= 42)

boolean取反

!

not

#if(!$foo)

注意:

  1. ==可以用来比较数字、字符串和对象相等,最后一个例子中(对象不是相同的类),toString()方法会被调用,然后将出来的字符串进行对比
  2. 你可以使用括号分隔他们,当文本后面紧跟着#的时候,这个是十分有用的。

#if( $foo == $bar)it's true!#{else}it's not!#end</li>

#foreach - Loops through a list of objects

格式:

# [ { ] foreach [ } ] ($refinarg)statement# [ { ] end [ } ]

用法:

  • $ref - 循环列表中的第一个变量引用。
  • arg - 它可以使一种列表引用(对象数组,集合或者Map),一种数组列表或者一个区间操作。
  • statement - 当Velocity在列表arg中找到一个合法的对象时,它将输出合法的VTL。

示例:

  • 引用:#foreach ( $item in $items )
  • 数组列表:#foreach ( $item in ["Not", $my, "fault"] )
  • 区间操作:#foreach ( $item in [1..3] )

Velocity提供了一个简单的方法来获取循环的次数:

<table>
#foreach( $customer in $customerList )
   
<tr><td>$foreach.count</td><td>$customer.Name</td></tr>
#end
</table>

另外,在Velocity1.5中允许循环最大数字是可以控制的。默认没有限制:

#
The maximum allowed number of loops.
directive.foreach.maxloops = -1

#include - Renders local file(s)
that are not parsed by Velocity

格式:

# [ { ] include [ } ] ( arg[ arg2 ... argn] )
  • arg - TEMPLATE_ROOT下一个合法的文件引入。

示例:

  • String:#include( "disclaimer.txt" "opinion.txt" )
  • 变量:#include( $foo $bar )

#parse - Renders a local template that is parsed by Velocity

格式:

# [ { ] parse [ } ] ( arg )
  • arg - TEMPLATE_ROOT下的模版文件。

示例:

  • String: #parse( "lecorbusier.vm" )
  • 变量:#parse( $foo )

递归也是被允许的,可以看一下velocity.properties中的parse_directive.maxdepth来修改parse的深度(默认的parse深度是10)。

#stop - Stops the template engine

格式:

# [ { ] stop [ } ]

使用场景:

停止目前的模版,在debug模版的时候比较好用。

#break - Stops the current directive

格式:

# [ { ] break [ } ]

使用场景:终止目前的内容指令,早期在#foreach中是用来提前结束循环的,也可以再其他的范围。你甚至可以在外部范围中跳过特殊的范围。

#evaluate - Dynamically evaluates a string or reference

格式:

# [ { ] evaluate [ } ] ( arg )
  • arg - String literal or reference to be dynamically evaluated.

示例:

  • String: #evaluate( 'string with VTL #if(true)will be displayed#end' )
  • 变量: #include( $foo )

#define - Assigns a block of VTL to a reference

格式:

# [ { ] define [ } ] ( $ref )statement# [ { ] end [ } ]
  • $ref - Reference that is assigned the VTL block as a value.
  • statement - Statement that is assigned to the reference.

示例:

  • #define( $hello ) Hello $who #end #set( $who = "World!") $hello ## displays Hello World!

#macro - Allows users to define a Velocimacro (VM), a repeated segment of a VTL template, as required

格式:

# [ { ] macro [ } ] ( vmname $arg1 [ $arg2 $arg3 ... $argn ] ) [ VM VTL code... ] # [ { ] end [ } ]
  • vmname - 调用VM的时候命名
  • $arg1 $arg2 [ ... ] - VM参数。可以有多个参数,但是参数必须在定义匹配上。
  • [ VM VTL code... ] - 任何合法的VTL代码都可以放置到模版中,也可以放到VM中。

一旦定义,vm可以像其他VTL指令一样来使用。

#vmname( $arg1 $arg2 )

除此,当你在body中想要调用vm,你必须在vm前面添加@,通过$!bodyContent,body就会找到宏定义的引用。

#@vmname( $arg1 $arg2 ) here is the body#end

VMs可以2个地方定义:

  1. 模板库:可以从任何模版中来预封装或者自定义,用户定义,网站定制
  2. 内联:在velocity.properties中仅当velocitymarco.permissions.allowInline=true的时候,可以再正式的模版中使用。

注释

注释不是运行时渲染的。

单行注释

## This is a comment.

多行注释

#*

This is a multiline comment.

This is the second line

*#

不做解析的内容

不做解析的内容是在运行时渲染的,而不是不解析。

#[[

This has invalid syntax that would normally need "poor man's escaping" like:

  • #define()
  • ${blah

]]#

VTL说明文档的更多相关文章

  1. 【腾讯GAD暑期训练营游戏程序班】游戏场景管理作业说明文档

    场景管理作业说明文档                              用了八叉树的算法,测出三层时最快,区域范围内物体数量为21块,控制台打印出的结果如图所示: 场景物体:游戏中,所有具有空 ...

  2. 浏览器内核控制Meta标签说明文档

    浏览器内核控制Meta标签说明文档 原文链接 背景介绍 由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的 ...

  3. OAuth2.0说明文档

    OAuth2.0说明文档 1.OAuth 2.0 简介 OAuth为应用提供了一种访问受保护资源的方法.在应用访问受保护资源之前,它必须先从资源拥有者处获取授权(访问许可),然后用访问许可交换访问令牌 ...

  4. Net 通用权限管理系统源码 带数据库设计文档,部署说明文档

    Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389

  5. SWFUpload 2.5.0版 官方说明文档 中文翻译版

    原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2 ...

  6. 在Sharepoint 2010中启用Session功能的说明文档

    在Sharepoint 2010中启用Session功能的说明文档 开发环境:Windows 7系统,SharePoint Server 2010,Visual Studio 2010 按以下步骤进行 ...

  7. Highcharts选项配置详细说明文档(zz)

    http://www.helloweba.com/view-blog-156.html Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明 ...

  8. Java基础(60):Java打包生成Jar和Javadoc说明文档,以及在另外的工程中导入和使用自己的Jar

    一.Jar包的导出 1.在Package Explorer中选中项目,右键,点击“Export”   2.在弹出框一次选择Java-->JAR file,点击Next   3.在新弹出的窗口选择 ...

  9. JAVA 文档注释,类的说明,HTML说明文档的生成

    有的时候,我们会写一些类,编译成.class文件,给别人使用,那么,别人不知道这个类有哪些方法,如何调用. 所以我们需要做一个类的说明文档. 可以采用在.java类里面进行注释,通过注释来生成类的说明 ...

随机推荐

  1. AirDrop显示名字的修改问题

    AirDrop的名字来源是设备登陆的iCloud账户 打开iCloud设置 把个人信息的名字改成自己的即可 前提是你的账号没有借朋友用过,如果朋友用过恰好没注销,你的通讯录又有你的朋友的号码,很有可能 ...

  2. 1059: [ZJOI2007]矩阵游戏 - BZOJ

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...

  3. 基于内嵌Tomcat的应用开发

    为什么使用内嵌Tomcat开发? 开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率. 怎么搭建内嵌To ...

  4. Windows2003/2008/2008 R2下易语言点支持库配置就退出的问题

    问题: 请问一个问题,我的电脑上win2003系统的,安装了易语言后,一点支持库配置就会自动退出.这是为什么啊? 解决方法如下: 删除 lib下的wmp.npk,重新打开易语言就可以了.

  5. The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemB:Light Bulb

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3203 题意:求影子的最长长度L; 当灯,人头和墙角成一条直线时(假设此时人 ...

  6. linux 配置java环境变量

    修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题. ·用文本编辑器打开/etc/profi ...

  7. hbase集群 常用维护命令

    一. zk集群 1. 查看当前服务的角色 leader/follower echo stat|nc 127.0.0.1 2181 2.  启动ZK服务: sh bin/zkServer.sh star ...

  8. ABC: Always Be Coding——程序员面试必

    本文作者@guitardave24 ">David Byttow 是一名程序员,曾在 Google 和 Square 等公司工作过. 在正文之前,先让我们回答几个简单的问题:第一,你面 ...

  9. 第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)

    在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务器上,还原的数据文件也只能在服务器上,当在非服务器的机器上启动sql server客户端的时候,也可以通过该客户端来 ...

  10. 【Web】CDN加速效果浅析

    1. 什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络.其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用 ...