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

VTL语法参考指南》中文版
源文见 http://velocity.apache.org
声明: 转载请保留此页声明
**************************************************************************
此文档为蓝杰实训学员拓展实训之用.
蓝杰实训不对译文中某些说法可能会对您的系统或开发造成损害负责.
如对您有所帮助,我们不胜荣幸!
*************************************************************************
本文属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
Mail: javafound@gmail.com
NetJava.cn@gmail.com
*************************************************************************
Velocity(www.velocity.apache.org)通常用来替换JSP技术. 使用它生成页面有以下优势:
·         简洁–一般的web美工不需要懂程序语言的就可以设计动态业面.
·         Web系统容易维护– MVC推荐的做法是在页面中不要存在其它的脚本语言出现..
·         容易访问数据模型的命令和属性–页面设计者通过引用简单的就可访问context中的java数据对象.
·         一致性– Velocity可用做其它的文本模板生成任务,如如发送email.
本系列全面讲解了将Velocity应用从入门到精通其技术特点应用的每个方面,助你成为MVC构架的高手.
  
1.关于本指南
2.语法参考
1.变量定义
2.访问属性
命令调用
3.动作指令
1.#set – 建立变量对值的引用
2.#if/#elseif/#else-条件判断
3.#foreach---使用循环通过列表迭代对象
4.#include – 在模板中引入本地文件,不用Velocity解析这个文件
5.#parse – 在模板引用处使用Velocity解析另一个模板输出
6.#stop – 中断模板解析
7.#macro – 让用户可以定义宏操作(Velocimacro (VM):一组实现特定功能的VTL)
4.Comments 注解
1.单行注解
2.多行注解
5.Feedback
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

转载于:https://www.cnblogs.com/vincent-blog/p/4477207.html

《VTL语法参考指南》中文版[转]相关推荐

  1. 《Velocity 模板使用指南》中文版[转]

    转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607931.aspx <Velocity 模板使用指南>中文版 源文见 htt ...

  2. Velocity 模板使用指南

    目录 1.本文目地和使用对象... 2 2.什么是Velocity?. 3 3.Velocity能为你做什么?. 3 1.一个Mud Store Example. 3 4.Velocity Templ ...

  3. Java1.5泛型指南中文版

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

  4. java velocity模版_使用velocity模板

    Apache Velocity开发者指南–导读 原文链接   译者:小村长 Velocity–导读 本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与Jsp,是一种基 ...

  5. freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术

    软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...

  6. Velocity模板(VM)语言介绍

    Velocity是什么?  Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码 ...

  7. 利用velocity模板以及itext生成pdf

    利用velocity模板以及itext生成pdf 我整理的源码:http://download.csdn.net/download/u012174571/8748897 首先是velocity的使用: ...

  8. velocity模板 If / ElseIf / Else语法

    12.3.1 If / ElseIf / Else Velocity中的#if 指令允许在页面生成时,在IF条件为真的情况下包含文本.例如: #if( $foo )<strong>Velo ...

  9. SpringBoot 项目中使用velocity模板(转载)

    (不要使用这种模板了,spring boot最新版已经不支持了.使用FreeMarker吧:http://blog.csdn.net/clementad/article/details/5194262 ...

  10. java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单

    1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...

最新文章

  1. 丰田、福特们的焦虑:2018才大举杀入自动驾驶,是刚刚好还是已经晚了?
  2. 模拟电路推荐学习书单
  3. 单纯形法只有两个约束条件_10分钟掌握对偶单纯形法
  4. 游戏开发需要具备哪些技术_生鲜小程序需要具备哪些功能板块?生鲜小程序开发...
  5. HTML单元格怎么加单元格,如何根据其值在HTML单元格中添加类
  6. Web安全的三个攻防姿势
  7. android edittext禁止输入特殊字符,Android EditText禁止输入空格和特殊字符
  8. git提交远程报错[rejected] master - master (fetch first)
  9. Android 应用中十大导航设计错误
  10. 怎么样辨别穷人跟有钱人?
  11. Linux下的网卡驱动程序的编写过程(转)
  12. 实用主义学python爬虫_麻瓜编程 实用主义学Python2018
  13. 计算机服务器机房设计方案,机房设计方案.pdf
  14. MeanTeacher论文学习笔记
  15. 在线json校验工具
  16. LabVIEW崩溃后如何排查故障
  17. 企企通持续助力全球管道预制先行者「迈科管道」,二期项目逐步启动
  18. 百家姓和名称正则匹配
  19. Vue,图片编辑功能实现
  20. openjudge 1.5.33

热门文章

  1. atof跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换
  2. 程序依赖图(Program Dependency Graph)-(PDG)
  3. 阿西莫夫科幻巨著 “基地三部曲”推荐
  4. 【图像处理】获取图片像素点
  5. jquery 图片转为base64
  6. 可视化项目区域设计1
  7. 基于Lucene的中文文本分词
  8. 转:AIX菜鸟成长日志
  9. 北京外企 外服控股:人服国企借道资产重组上市,发 力数字化谋新篇
  10. 微信怎么制作小程序?制作微信小程序流程