VTL statement

语法部分

directive(指令)

#set( $a = "Velocity" ) // 赋值语句

在上面的例子中,#set是分配一个值给变量.变量$a在模板中输出

  • Velocity中仅有String可以被赋值给变量
  • 使用$字符开始的references用于得到什么;使用#字符开始的directives用于作些什么.

Hello Velocity World!

<html><body>#set( $foo = "Velocity" )Hello $foo World!</body>
</html>

注释

## This is a sing line comment.#* Thus begins a multi-line comment. *##** This is a VTL comment block and may be used to store such information as the document author and versioning information:
@author
@version *#

References

在VTL中有三种类型References: 变量(variables),属性(properties),方法(methods).

  • 所有的reference被作为一个String对象处理.如果有一个对象$foo是一个Integer对象,那么Velocity将调用它的toString()方法将这个对象转型为String类型.
变量(variables)

非正式变量是由’$’开关,接着是VTL标识符.VTL标识符必须以字母(a-z|A-Z)开关,剩下的部分限于以下几种: (a-z|A-Z|0-9|-|_)

:例: costmer ## 非正式costmer ## 非正式 {costmer} ## 正式

属性(properties)

非正式变量是由’$’开头,接着是VTL标识符,再接着就是字符(“.”)和其他的VTL标签符.

:例: costomer.Address ## 非正式costomer.Address ## 非正式 {costomer.Address} ## 正式

上面的例子有两种含义.它可以表示:查找hashtable对象customer中以Address为关键字的值;也可以表示调用customer对象的getAddress()方法.当你的页面被请求时,Velocity将确定以上两种方式选用哪种,然后返回适当的值.

方法(methods)

非正式方法是由’$’开始并跟随VTL标识符组成的References,一般还包括一个VTL方法体.一个方法体包括一个VTL标识接着一个左手号(‘(‘),接着是参数列表,再接着是右括号(‘)’).
这里是一些在VTL中有效的方法定义:

:例: customer.getAddress() ## 非正式customer.getAddress() ## 非正式 page.setTitle( “My Home Page!” ) ## 非正式
{customer.getAddress()} ## 正式{customer.getAddress()} ## 正式 {customer.setTitle()} ## 正式

Quiet reference notation

<input type="text" name="email" value="$email"/>

当form最初加载的时候,变量email没有值,但你想出现一个空白的文本框设定值为"email没有值,但你想出现一个空白的文本框设定值 为"email”.使用quiet reference notation可以使Velocity正常显示.你需要用!email来代替!email来代替email.所以上面的例子会改成下面

非正式

<input type="text" name="email" value="$!email"/>

正式

<input type="text" name="email" value="$!{email}"/>

Escaping valid VTL reference (逃避特殊符号)

#set( $email = "foo" )
$email
\$email
\\$email
\\\$email

将显示为
foo
$email
\foo
\$email

Case substitution

$foo.getBar()
## is the same as
$foo.Bar$data.getUser("jon")
## is the same as
$data.User("jon)

Directives

#set
#set( $primate = "monkey" )
#set( $customer.Behavior = "$primate" )
  • 左边一定是一个变量或者一个属性
  • 右边可以是(变量,字符串,属性,方法,数字,数组,算术表达式)
  • 如果右边是null,VTL的处理将比较特殊,它将指向一个已经存在的reference
条件语句 (if/elseif/else/end)
#if( $foo && $bar)<strong> This and that</strong>
#end
循环 foreach
#foreach( $product in $allProducts )<li>$product</li>
#end
  • $allProducts可以 是珍上Vector,Hashtable,Array
  • 默认循环索引变量 $velocityCount可以在velocity.properties设置
include

include允许模板设计者引入本地文件,被引入文件的内容将不会通过模板引擎被render.为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下.

include( “one.gif”, “two.txt”, “three.txt” ) ## 多个文件用’,’分隔

parse

就像#include,#parse接受一个变量而不是模板,任何由#parse指向的模板都必须包含在TEMPLATE_ROOT目录下.与#include不同的是,#parse只能指定单个对象

#stop

stop 允许模板设计者停止执行模板引擎并返回,把它应用于debug是很有帮助的.

Velocimacros

macro允许定义一段可征用的VTL template.


#macro( d )<tr><td></td></tr>
#end#d()
  • Velocimacro arguments (Reference, String literal, Number literal, IntegerRange[1..3],对象数组,boolean值)

Velocimacro properties

  • velocimacro.library: 一个逗号分隔的模板库列表.默认情况下velocity查找唯一的一个库: VM_global_library.vm.
  • velocimacro.permissions.allow.inline属性:有两个可靠的值true或者false,通过它可以确定Velocimacros是否可以被定义在regular template内.默认值是true.
  • velocimacro.permissions.allow.inline.replace.global属性有两个可靠的值true或者false,通过它可以确定inline的Velocimacro定义是否可以替代全局的Velocimacro定义
  • velocimacro.permissions.allow.inline.local.scale属性有两个可靠的值true或者false,默认false.作用是用于确定inline定义的velocimacros是否仅仅补定义的template内可见
  • velocimacro.context.localscope属性有true和false两个可选值,默认值为false.当设置为true时,任何在Velocimacro内通过#set()对context的修改被认为是针对此velocimacro的本地设置,而不会永久的影响内容.
  • velocimacro.library.autoreload属性控制velocimacro库的自动加载.默认是false,可以配置为开发模式.

附: 开发环境做以下配置,可避免修改VTL重启容器

file.resource.loader.path = templates
file.resource.loader.cache = false
velocimacro.library.autoreload = true

Velocity模板语言(VTL):说明相关推荐

  1. Velocity模板语言VTL

    2019独角兽企业重金招聘Python工程师标准>>> Velocity是Apache软件组织提供的一想开源源码项目,可前往Apache Velocity Project下载.它是基 ...

  2. velocity 模板语言(VTL)

    一 是什么 velocity是一种让web设计者易于掌握和使用的模板语言,主要目的是简化web动态页面的开发.为了获取这种语言的支持,你需要java基础类集合,才能在MVC的model模型和view视 ...

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

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

  4. 模板语言(VTL):入门

    VTL使用references来在web site内嵌套动态内容,一个变量就是一种类型的reference. 变量是某种类型的refreence,它可以指向java代码中的定义,或者从当前页面内定义的 ...

  5. VTL(Velocity Templates Language,即Velocity模板语言)初识语法总结

    1.velocity是一门基于Java语言的视图表现层模板引擎,它可以取代jsp,比jsp更高效. 2.velocity变量的定义与引用 (1).定义一个变量:#set ($a = "vel ...

  6. Apache Velocity 模板语言 特殊字符${ $!{ 原样输出问题 转义符 # ! 无效

    Velocity版本比较古老,1.7的,没试用新的2.2,不太清除是不是版本导致的问题 先来说下问题,常规情况下需要原样输出这几个特殊字符的话,只要直接在模板中输入就行了,会原样显示,例如 接下来说特 ...

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

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

  8. velocity模板引擎帮助

    Velocity用户手册是帮助页面设计者和内容提供者认识Velocity和其简单而功能强大的脚本语言――Velocity模板语言(VTL).在手册上的许多例子,都是用Velocity插入动态的内容到网 ...

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

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

最新文章

  1. Altium designer中元器件库(SCHLIB)元件引脚上文字(标号)大小及距离边缘位置设置
  2. wegame每次登陆都要滑动验证_Vue项目中实现用户登录及token验证
  3. terminal mysql 停止_转载MySQL之终端(Terminal)管理MySQL
  4. 航拍+AI︱paddlepaddle图像分割实现天空风格迁移(换天、漂浮城堡、宇宙飞船)
  5. Android中在SurfaceView上高效绘图
  6. 干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践
  7. 08_Flask ORM 利用SQLAlchemy进行数据库增删改查
  8. 某班30名同学成绩c语言,.编程实现:求某班30个同学的所有成绩,并统计出其平均分,最高分和最低分。...
  9. 手撕HashMap数据结构(带你逐行阅读源码)
  10. 单元测试技巧之PowerMock
  11. DTOJ 1486:分数(score)
  12. linux关机重启机器人,Linux Stopped (tty output) 问题
  13. 使用IO口检测电源电压的转换逻辑
  14. 【笔记】学习CSS布局17——column
  15. 脑电信号(EEG)简介:原理、应用与分析方法
  16. TCP/UDP/SOCKET/HTTP浅谈
  17. Mac 上快速切换同一程序的窗口
  18. [Matlab]切比雪夫Ⅰ型滤波器设计:低通、高通、带通和带阻(2)
  19. Your “Flamingo“ is My “Bird”:Fine-Grained or Not
  20. 安装资源包后出现的错误信息解决办法

热门文章

  1. mysql备份与还原心得体会_MySQL数据恢复心得体会
  2. 好评返现如何摆脱平台规则和流量限制
  3. 深度学习训练时GPU利用率忽高忽低问题
  4. github中repositories与projects区别
  5. Neo4j【有与无】【N0】前言
  6. 二手车电商又多了一只独角兽?
  7. 51单片机四位数码管的使用方法
  8. 物联网介绍の高屋建瓴篇
  9. 三国塔防魏传java_三国塔防魏传1.6详细攻略
  10. 【计算广告】移动设备 效果类广告 归因方式