Velocity(2)——引用
在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}。
Velocity(2)——引用的更多相关文章
- Velocity语言的介绍
Velocity语言的介绍 2016-09-06 15:39:25 语言介绍 Velocity是一种Java模版引擎技术,是一个基于Java的模板引擎(template engine).她允许任何人简 ...
- Velocity(4)——大小写
Velocity是大小写敏感的.但是为了减少使用者的错误,某些地方存在特殊情况. 比如$foo.bar,首先会被检查是否能匹 配$foo.getbar(),再被检查是否能匹配$foo.getBar() ...
- 《Apache Velocity用户指南》官方文档
http://ifeve.com/apache-velocity-dev/ <Apache Velocity用户指南>官方文档 原文链接 译文连接 译者:小村长 校对:方腾飞 Qui ...
- Velocity笔记--使用Velocity获取动态Web项目名的问题
以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- Velocity 局部定制模板
Velocity介绍 Velocity是一个基于java的template engine.它允许Web designer引用Java Code中定义的方法.Web designer可以和Java工程师 ...
- 只需2分钟,简单构建velocity web项目
Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 velocity ...
- Velocity 语法(转)
一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...
随机推荐
- 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)
我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...
- 搭建C语言开发环境
大学的时候有数据结构这门课,但...终究还是得学.电脑是win8的,根据网上的教程倒是能安装成功vc6.0并且能够打开新建工程,但是一编译运行就提示兼容性问题. 首先安装C语言编译器.下载MinGw ...
- yum 安装mysql5.6
系统centos5.5 进入http://dev.mysql.com/downloads/repo/,下载RedHat Enterprise Linux 5 / Oracle Linux 5版. 点击 ...
- Android 一键直接查看Sqlite数据库数据
转自:http://www.cnblogs.com/trinea/archive/2012/11/16/2773656.html 本文主要介绍Android开发中如何一键直接查看sqlite数据库中的 ...
- day12
JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件的最上方 ...
- ajax例子:审核验证用户名;登录界面
审核验证用户名主页面: <body><div>用户名:<input type="text" id="uid" /><s ...
- jeecg的cq查询方式
@RequestMapping(params = "datagrid") public void datagrid(TbStudentDepEntity tbStudentD ...
- RequestContextListener有什么用
问题: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request att ...
- css“变形”效果
<html <head> <title></title> <style> .test { margin-left:300px; margin-to ...
- mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication解决办法
mysqlnd是个好东西.不仅可以提高与mysql数据库通信的效率,而且也可以方便的设置一些超时.如,连接超时,查询超时.但是,使用mysqlnd的时候,有个地方需要注意.就是服务端的密码格式不能使用 ...