在VTL中有三种类型的references:变量(variables)、属性(properties)、方法(methods).
变量:
格式要求同java。
属性
$customer.Address
$purchase.Total
方法
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( “My Home Page” )
$person.setAttributes( [“Strange”, “Weird”, “Excited”] )
reference的正是格式如下:
${mudSlinger} 变量
${customer.Address} 属性
${purchase.getTotal()} 方法
$!{email},$!email
在VTL中使用$2.5这样的货币标识是没有问题得的,VTL不会将它错认为是一个reference,因为VTL中的reference总是以一个大写或者小写的字母开始。
Escaping valid VTL reference
VTL中使用“\”作为逃逸符。
例如:
#set( $email = “foo” )
$email
\$email
\\$email
\\\$email
将render为:
foo
$email
\foo
\\$email
如果email变量没有被定义则
$email
\$email
\\$email
\\\$email
将被render为:
$email
\$email
\\$email
\\\$email
注意:VTL中未被定义的变量将被认为是一个字符串,所以以下例子:
#set( $foo = “gibbous” )
$moon = $foo
的输出结果是:
$moon = gibbous
Directives
Reference允许设计者使用动态的内容,而directive使得你可以应用java代码来控制你的显示逻辑,从而达到你所期望的显示效果。
#set
#set directive被用于设置一个reference的值。例如:
#set ( $primate = “monkey” )
#set ( $customer.Behavior = $primate )
赋值左侧的(LHS)必须是一个变量或者属性reference。右侧(RHS)可以是以下类型中一种:
l 变量reference
l String literal
l 属性reference
l 方法reference
l number literal
l ArrayList
下面是应用各种类型的RHS的例子:
#set ( $monkey = $bill ) ##变量reference
#set ( $monkey.Friend = “monica” ) ##String literal
#set ( $monkey.Blame = $whitehouse.Leak )##属性reference
#set ( $monkey.Plan = $spindoctor.weave($web) )##方法reference
#set ( $monkey.Number = 123 )##Number literal
#set ( $monkey.Say = [“Not”, $my, “fault”] )##ArrayList
注意:最后一个例子的取值方法为:$monkey.Say.get(0)
RHS也可以是一个简单的算术表达式:
#set ( $value = $foo + 1 )
#set ( $value = $bar -1 )
#set ( $value = $foo * $bar )
#set ( $value = $foo / $bar )
如果你的RHS是一个null,VTL的处理将比较特殊:它将指向一个已经存在的reference,这对初学者来讲可能是比较费解的。例如:
#set ( $resut = $query.criteria(“name”) )
The result of the first query is $result
#set ( $resut = $query.criteria(“address”) )
The result of the second query is $result
如果$query.criteria(“name”)返回一个“bill”,而$query.criteria(“address”)返回的是null,则显示的结果如下:
The result of the first query is bill
The result of the first query is bill
看看下面的例子:
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end
在上面的例子中,程序将不能智能的根据$result的值决定查询是否成功。在$result被#set后(added to the context),它不能被设置回null(removed from the context)。打印的结果将显示两次查询结果都成功了,但是实际上有一个查询是失败的。
为了解决以上问题我们可以通过预先定义的方式:
#set( $criteria = [“name”, “address”] )
#foreach( $criterion in $criteria )
#set( $result = false )
#set( $result = $query.criteria( $criterion ) )
#if( $result )
Query was successful
#end
#end
String Literals
当你使用#set directive,String literal封闭在一对双引号内。
#set ( $directoryRoot = “www” )
#set ( $templateName = “index.vm” )
#set ( $template = “$directoryRoot/$tempateName” )
$template
上面这段代码的输出结果为:www/index.vm
但是,当string literal被封装在单引号内时,它将不被解析:
#set ( $foo = “bar” )
$foo
#set ( $blargh = ‘$foo’ )
结果:
bar
$foo
这里需要注意一点:Velocity context仅仅能够包含对象,所以当我们说“boolean”时实际上代表的时一个Boolean对象。
注意这里的Velocity的数字是作为Integer来比较的――其他类型的对象将使得条件为false,但是与java不同它使用“==”来比较两个值,而且velocity要求等号两边的值类型相同。
include: #include script element允许模板设计者引入本地文件
parse: #parse script element允许模板设计者一个包含VTL的本地文件。
当将一个reference作为参数传递给Velocimacro时,请注意reference作为参数时是以名字的形式传递的。这就意味着参数的值在每次Velocimacro内执行时才会被产生。这个特性使得你可以将一个方法调用作为参数传递给Velocimacro,而每次Velocimacro执行时都是通过这个方法调用产生不同的值来执行的。例如:
#macro ( callme $a )
$a $a $a
#end
#callme( $foo.bar() )
执行的结果是:reference $foo的bar()方法被执行了三次。
如果你不需要这样的特性可以通过以下方法:
#set ( $myval = $foo.bar() )
#callme ( $myval )
分享到:
相关推荐
介绍velocity的基本知识点和常用语法,及用法实例!
单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...
2.2 基本装配 2.2.1 使用XML装配 2.2.2 添加一个Bean 2.2.3 通过Set方法注入依赖 2.2.4 通过构造函数注入依赖 2.3 自动装配 2.3.1 处理自动装配中的不确定性 2.3.2 混合使用自动和...
Volume(大量) Velocity(速率) Variety(多样) Value(价值) Veracity(真实性) 大数据基本概念 2.技术概念-逻辑处理 大数据价值体现 大数据价值 记录——情景辅助,操作基础 备份和监督——情景复原,责任追究 预测...
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ,因此在我的书里边就...
项目的基本框架及配置 创建 git 仓库,本地配置 IDEA 并测试 pull 和 push。 创建 SpringBoot 工程,导入 web,velocity 和 aop 的包。 生成 maven 项目,pom.xml 包含上述依赖。 Controller 中使用注解配置,...
项目的基本框架及配置 创建 git 仓库,本地配置 IDEA 并测试 pull 和 push。 创建 SpringBoot 工程,导入 web,velocity 和 aop 的包。 生成 maven 项目,pom.xml 包含上述依赖。 Controller 中使用注解配置,...
项目的基本框架及配置 创建 git 仓库,本地配置 IDEA 并测试 pull 和 push。 创建 SpringBoot 工程,导入 web,velocity 和 aop 的包。 生成 maven 项目,pom.xml 包含上述依赖。 Controller 中使用注解配置,...
但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请 求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的流程,支 持Jsp,Freemarker,...
互相关测速算法(Cross-Correlation Velocity Measurement Algorithm)是一种用于计算流体中颗粒流速的方法。该算法基于两个传感器之间的互相关分析,通过比较两个传感器之间的信号差异来确定颗粒的运动速度。 在...
.2.2.2基本配置 22 2.2.3服务器页面介绍 23 2.3eclipse的下载与安装 24 2.3.1eclipse的下载与安装 24 2.3.2熟悉eclipse开发环境 24 2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个...
第⼆个,Velocity,即⾼速,速率快,⼤数据产⽣的速度是很快的,有个知名的说法,即⼤ 数摩尔定律,据测算,现在每两年数据就会翻⼀倍,这个增长量是及其可怕的。第三个,Variety多样性,之前产⽣的数据多半是结构化...
基于 Sebastian Endrikat ... 这段代码基本上可以做到这一点。 它还通过拟合样条曲线找到最大伽马 1,因此不受矢量场网格分辨率的限制。
集群、分割、孤立点分析还有其他的算法让我们深入数据内部,挖掘价值。这些算法不仅要处理大数据的量,也要处理大数据的速度 数据挖掘算法 数据挖掘可以让分析员更好的理解数据,而预测性分析可以让分析员根据可视化...
业界将其归纳为4个"V"——Volume(数据体谅巨大),Variety(数据 种类繁多),Value(价值密度低),Velocity(处理速度快)。 海量数据存储、数据挖掘、图像视频智能分析,都是大数据的重要组成部分。 大数据的...
业界将其归纳为4个"V"——Volume(数据体谅巨大),Variety(数据 种类繁多),Value(价值密度低),Velocity(处理速度快)。 海量数据存储、数据挖掘、图像视频智能分析,都是大数据的重要组成部分。 大数据的...
5.1 速度向量(Velocity) 5.1.1 向量与速度向量 5.1.2 单轴速度 5.1.3 两个轴上的速度 5.1.5 速度向量扩展 5.1.5 速度扩展 5.2 加速度 5.2.1 单轴加速度 5.2.2 双轴加速度 5.2.3 重力加速度 5.2.4 角加速度 5.2.5 ...
大数据的4V特点:Volume、Velocity、Variety、Veracity。 2、随着云时代的来临,大数据(Big data)吸引了越来越多的关注。大数据(Big data)通常用来形容一个公司创造的大量非结构化和半结构化数据,大数据分析常...
Number or Array easeIn(t, tMin, tMax, value1, value2) {t, tMin和tMax 是一个数, value1和value2 是数或数组}返回 值与ease相似, 但只在切入点tMin 的速率为0,靠近tMax 一边是线性的。 Number or Array ...