Velocity模板语言(VTL):说明
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):说明相关推荐
- Velocity模板语言VTL
2019独角兽企业重金招聘Python工程师标准>>> Velocity是Apache软件组织提供的一想开源源码项目,可前往Apache Velocity Project下载.它是基 ...
- velocity 模板语言(VTL)
一 是什么 velocity是一种让web设计者易于掌握和使用的模板语言,主要目的是简化web动态页面的开发.为了获取这种语言的支持,你需要java基础类集合,才能在MVC的model模型和view视 ...
- java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单
1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...
- 模板语言(VTL):入门
VTL使用references来在web site内嵌套动态内容,一个变量就是一种类型的reference. 变量是某种类型的refreence,它可以指向java代码中的定义,或者从当前页面内定义的 ...
- VTL(Velocity Templates Language,即Velocity模板语言)初识语法总结
1.velocity是一门基于Java语言的视图表现层模板引擎,它可以取代jsp,比jsp更高效. 2.velocity变量的定义与引用 (1).定义一个变量:#set ($a = "vel ...
- Apache Velocity 模板语言 特殊字符${ $!{ 原样输出问题 转义符 # ! 无效
Velocity版本比较古老,1.7的,没试用新的2.2,不太清除是不是版本导致的问题 先来说下问题,常规情况下需要原样输出这几个特殊字符的话,只要直接在模板中输入就行了,会原样显示,例如 接下来说特 ...
- freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术
软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...
- velocity模板引擎帮助
Velocity用户手册是帮助页面设计者和内容提供者认识Velocity和其简单而功能强大的脚本语言――Velocity模板语言(VTL).在手册上的许多例子,都是用Velocity插入动态的内容到网 ...
- 《Velocity 模板使用指南》中文版[转]
转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607931.aspx <Velocity 模板使用指南>中文版 源文见 htt ...
最新文章
- Altium designer中元器件库(SCHLIB)元件引脚上文字(标号)大小及距离边缘位置设置
- wegame每次登陆都要滑动验证_Vue项目中实现用户登录及token验证
- terminal mysql 停止_转载MySQL之终端(Terminal)管理MySQL
- 航拍+AI︱paddlepaddle图像分割实现天空风格迁移(换天、漂浮城堡、宇宙飞船)
- Android中在SurfaceView上高效绘图
- 干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践
- 08_Flask ORM 利用SQLAlchemy进行数据库增删改查
- 某班30名同学成绩c语言,.编程实现:求某班30个同学的所有成绩,并统计出其平均分,最高分和最低分。...
- 手撕HashMap数据结构(带你逐行阅读源码)
- 单元测试技巧之PowerMock
- DTOJ 1486:分数(score)
- linux关机重启机器人,Linux Stopped (tty output) 问题
- 使用IO口检测电源电压的转换逻辑
- 【笔记】学习CSS布局17——column
- 脑电信号(EEG)简介:原理、应用与分析方法
- TCP/UDP/SOCKET/HTTP浅谈
- Mac 上快速切换同一程序的窗口
- [Matlab]切比雪夫Ⅰ型滤波器设计:低通、高通、带通和带阻(2)
- Your “Flamingo“ is My “Bird”:Fine-Grained or Not
- 安装资源包后出现的错误信息解决办法