2019独角兽企业重金招聘Python工程师标准>>>

在Velocity Template Language(VTL)中,有三种类型的引用:变量,属性,方法。所有的引用都被看作是字符串,如果某个引用是一个整型值,velocity会调用它的toString()方法,将它转换为String。

变量:

变量是由$和紧跟其后的VTL标识符组成的。而VTL标识符必须以字母开头,后面可以包含并且仅能包含字母、数字、下划线以及减号。像$2.4这样的字符串,是不会被识别为变量的,因为2.4不是一个VTL标识符。

属性:

属性是由四部分组成,依次是$, 紧跟其后的VTL标识符,小数点,紧跟其后的VTL标识符。比如$Foo.bar。实际上,这个属性有两个含义,它可以表示在Foo标记的hashtable中寻找并返回bar这个key对应的value,也可以表示$Foo.getbar()这个方法(此方法在java中定义)。

方法:

方法是由四部分组成,依次是$,紧随其后的VTL标识符,小数点,紧随其后的函数调用。这里的函数调用是可以带参数的。比如$Foo.getBar("test")。

很显然,属性有时是方法的一种简写,$Foo.bar和$Foo.getbar()是等价的,这种情况下,尽量使用属性的形式。但是方法有参数的话,就没有和它等价的属性了。

属性的搜索规则:

属性可以表示为调用方法,也可表示从hashtable中找值,对于$Foo.bar来说,Velocity会按照以下顺序解析:

$Foo.getbar(), $Foo.getBar(), $Foo.get("bar"), $Foo.isBar()

而对于$Foo.Bar来说,Velocity会按照以下顺序解析:

$Foo.getBar(), $Foo.getbar(), $Foo.get("Bar"), $Foo.isBar()

所以,前两个是寻找方法,第三个是在hashtable中找值,第四个是一个is判断。

另外需要注意的是,属性不会被解析为对象的实例变量。$Foo.bar可以表示$Foo.getbar()或者$Foo.get("bar"),但是它不表示Foo这个java对象的bar属性。

规范的引用写法:

$Foo是一个简化后的写法,规范的写法应该是${Foo}。大部分情况下,简化写法是可以的,但是当一个引用后面紧跟一个VTL标识符时,规范写法就是必要的了。比如$Footic和${Foo}tic就是两种不同的含义。所以,尽量还是使用规范写法,它永远不会有错。属性和方法的规范写法是${Foo.bar}以及${Foo.bar()}。

Quiet Reference Notation(不知道该怎么翻译):

如果一个引用(不管哪种类型)没有被定义,那么在使用时,它就没有值。Velocity默认的做法是,将这个引用作为普通字符串对待。比如,在<input type="text" name="email" value="$email" />中,如果$email并没有定义,那么这个文本框的value就是"$email"这个字符串。如果用$!email替代$email,那么输出将会是空字符串,而不是"$email"。对应的规范写法是$!{email}。

转载于:https://my.oschina.net/zjllovecode/blog/1840609

Velocity(2)——引用相关推荐

  1. velocity自定义标签和指令

    velocity本身支持自定义标签和指令的扩展, 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用,而以井号 # 开头的语句则为 Velocity 的指令(Direct ...

  2. java中velocity定义宏标签_velocity自定义标签和指令(转:zwj)

    velocity本身支持自定义标签和指令的扩展,我们看看扩展指令的步骤及searchweb2的应用场景, 1.使用方法 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用 ...

  3. Velocity笔记--使用Velocity获取动态Web项目名的问题

    以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...

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

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

  5. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  6. Spring MVC整合Velocity

    Velocity模板(VM)语言介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由j ...

  7. Velocity知识点总结

    Velocity知识点总结 1. 变量 (1)变量的定义: #set($name = "hello") 说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引號 ...

  8. velocity 模板语言(VTL)

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

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

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

最新文章

  1. 短视频风口创业不容易,您信吗?
  2. 详细推导PCA算法(包括算法推导必备的知识)
  3. 1.5 编程基础之循环控制 21 角谷猜想--方法二
  4. Android 系统(88)---Android关键字persistent
  5. 使用Python内置集合对象和内置函数filter()过滤无效书评
  6. 8-2 主从复制高可用
  7. 开机自动启动_工控机断电恢复后自动开机的设置方法
  8. anno arm移植Qt环境后,编译正常,程序无法正常启动问题的记录
  9. python利用pygame框架实现类似推箱子游戏 Star Pusher
  10. Inception介绍(MySQL自动化运维工具)
  11. s3c2410多通道adc驱动及测试程序(使用write控制多通道)
  12. 自媒体平台批量文章采集
  13. 互联网公司纷纷裁员,大家都在说互联网行业进入了寒冬期,你怎么看待这个说法?
  14. 如何把手变成手控_女生的手怎样变好看?
  15. 犯了这15个错误,你可能会上征信“黑名单”
  16. 百度编辑器嵌套秀米编辑器遇到的问题
  17. windows无法自动修复此计算机鼠标,win10 2.4g无线鼠标驱动异常怎么修复_win10 2.4g无线鼠标驱动出错处理方法...
  18. STM32通过esp8266获取心知天气数据(hal库)
  19. 如果有人问你 SQL 注入的资料,请叫他看这份速查表
  20. Jquery颜色选择插件使用

热门文章

  1. 机器学习面试题集 - 如何进行 A/B 测试
  2. 神经元产生的雌激素可能是一种新型的神经调节剂
  3. IBM Watson失败的4大原因
  4. 神经网络中激活函数的真正意义?
  5. 马尔可夫模型与条件随机场模型
  6. 从多维度解析神经科学中的视觉编码
  7. 马化腾:微信将被谁颠覆,领衔下一代互联网的终端居然是?
  8. 哈勃望远镜进一步确认宇宙在加速膨胀
  9. 干货|2018物流机器人行业报告发布!不容错过
  10. 谷歌母公司投资成绩:4大机构各有侧重,投资2个马斯克项目