Velocity 引用
2016-07-09 14:38
369 查看
在Velocity Template Language(VTL)中,有三种类型的引用:变量,属性,方法。所有的引用都被看作是字符串,如果某个引用是一个整型值,velocity会调用它的toString()方法,将它转换为String。
变量:
变量是由$和紧跟其后的VTL标识符组成的。而VTL标识符必须以字母开头,后面可以包含并且仅能包含字母、数字、下划线以及减号。像$2.4这样的字符串,是不会被识别为变量的,因为2.4不是一个VTL标识符。
属性:
属性是由四部分组成,依次是$, 紧跟其后的VTL标识符,小数点,紧跟其后的VTL标识符。比如$Var.pro。实际上,这个属性有两个含义,它可以表示在Var标记的hashtable中寻找并返回pro这个key对应的value,也可以表示$Var.getPro()这个方法(getPro方法需自定义)。
方法:
方法是由四部分组成,依次是$,紧随其后的VTL标识符,小数点,紧随其后的函数调用。这里的函数调用是可以带参数的。比如$Var.getPro("test")。
*很显然,属性有时是方法的一种简写,$Var.pro和$Var.getPro()是等价的,这种情况下,尽量使用属性的形式。但是方法有参数的话,就没有和它等价的属性了。
属性的搜索规则:
属性可以表示为调用方法,也可表示从hashtable中找值,对于$Var.pro来说,Velocity会按照以下顺序解析:$Var.getpro(),
$Var.getPro(), $Var.get("pro"), $Var.isPro();而对于$Var.Pro来说,Velocity会按照以下顺序解析:$Var.getPro(), $Var.getpro(), $Var.get("Pro"), $Var.isPro()。所以,前两个是寻找方法,第三个是在hashtable中找值,第四个是一个is判断。
*另外需要注意的是,属性不会被解析为对象的实例变量。$Var.pro可以表示$Var.getpro()$Var.get("pro"),但是它不表示Var这个java对象的pro属性。
规范的引用写法:
$Var是一个简化后的写法,规范的写法应该是${Var}。大部分情况下,简化写法是可以的,但是当一个引用后面紧跟一个VTL标识符时,规范写法就是必要的了。比如$Vartic和${Var}tic就是两种不同的含义。所以,尽量还是使用规范写法,它永远不会有错。属性和方法的规范写法是${Var.pro}以及${Var.pro()}。
如果一个引用(不管哪种类型)没有被定义,那么在使用时,它就没有值。Velocity默认的做法是,将这个引用作为普通字符串对待。比如,在<input type="text" name="email" value="$email" />中,如果$email并没有定义,那么这个文本框的value就是"$email"这个字符串。如果用$!email替代$email,那么输出将会是空字符串,而不是"$email"。对应的规范写法是$!{email}。
变量:
变量是由$和紧跟其后的VTL标识符组成的。而VTL标识符必须以字母开头,后面可以包含并且仅能包含字母、数字、下划线以及减号。像$2.4这样的字符串,是不会被识别为变量的,因为2.4不是一个VTL标识符。
属性:
属性是由四部分组成,依次是$, 紧跟其后的VTL标识符,小数点,紧跟其后的VTL标识符。比如$Var.pro。实际上,这个属性有两个含义,它可以表示在Var标记的hashtable中寻找并返回pro这个key对应的value,也可以表示$Var.getPro()这个方法(getPro方法需自定义)。
方法:
方法是由四部分组成,依次是$,紧随其后的VTL标识符,小数点,紧随其后的函数调用。这里的函数调用是可以带参数的。比如$Var.getPro("test")。
*很显然,属性有时是方法的一种简写,$Var.pro和$Var.getPro()是等价的,这种情况下,尽量使用属性的形式。但是方法有参数的话,就没有和它等价的属性了。
属性的搜索规则:
属性可以表示为调用方法,也可表示从hashtable中找值,对于$Var.pro来说,Velocity会按照以下顺序解析:$Var.getpro(),
$Var.getPro(), $Var.get("pro"), $Var.isPro();而对于$Var.Pro来说,Velocity会按照以下顺序解析:$Var.getPro(), $Var.getpro(), $Var.get("Pro"), $Var.isPro()。所以,前两个是寻找方法,第三个是在hashtable中找值,第四个是一个is判断。
*另外需要注意的是,属性不会被解析为对象的实例变量。$Var.pro可以表示$Var.getpro()$Var.get("pro"),但是它不表示Var这个java对象的pro属性。
规范的引用写法:
$Var是一个简化后的写法,规范的写法应该是${Var}。大部分情况下,简化写法是可以的,但是当一个引用后面紧跟一个VTL标识符时,规范写法就是必要的了。比如$Vartic和${Var}tic就是两种不同的含义。所以,尽量还是使用规范写法,它永远不会有错。属性和方法的规范写法是${Var.pro}以及${Var.pro()}。
如果一个引用(不管哪种类型)没有被定义,那么在使用时,它就没有值。Velocity默认的做法是,将这个引用作为普通字符串对待。比如,在<input type="text" name="email" value="$email" />中,如果$email并没有定义,那么这个文本框的value就是"$email"这个字符串。如果用$!email替代$email,那么输出将会是空字符串,而不是"$email"。对应的规范写法是$!{email}。
相关文章推荐
- 如何在 LibreOffice 中创建模板以实现省时高效
- 设计模式之行为型模式 - 调用行为的传递问题
- [div+css]晒晒最新制作专题推广页模板
- 易语言基础教程之定义及变量
- 2008大学生入党申请书 模板
- Ruby中的变量学习总结
- 详解Lua中的变量相关知识点
- Lua中的变量类型与语句学习总结
- IMAIL多语言模板两套Outlook&Gmail模板下载
- dos批处理文件中的变量小结
- 探索PowerShell(七) PowerShell变量
- VBScript教程 第四课VBScript变量
- 关于SQL 存储过程入门基础(基础知识)
- perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
- VBS教程:VBScript 基础-VBScript 变量
- Erlang语法学习笔记:变量、原子、元组、列表、字符串
- mssql存储过程表名和字段名为变量的实现方法
- Shell脚本定义变量和重新赋值
- 在C语言编程中使用变量的基础教程
- 深入理解C++编程中的局部变量和全局变量