`
zl198751
  • 浏览: 272646 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Velocity 学习基本点

阅读更多

在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教程

    介绍velocity的基本知识点和常用语法,及用法实例!

    单点登录源码

    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...

    spring in action英文版

     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 混合使用自动和...

    大数据在电商的应用.pdf

    Volume(大量) Velocity(速率) Variety(多样) Value(价值) Veracity(真实性) 大数据基本概念 2.技术概念-逻辑处理 大数据价值体现 大数据价值 记录——情景辅助,操作基础 备份和监督——情景复原,责任追究 预测...

    一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)

    松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ,因此在我的书里边就...

    生鲜配送平台源码java-nowcoder-project:现在编码器项目

    项目的基本框架及配置 创建 git 仓库,本地配置 IDEA 并测试 pull 和 push。 创建 SpringBoot 工程,导入 web,velocity 和 aop 的包。 生成 maven 项目,pom.xml 包含上述依赖。 Controller 中使用注解配置,...

    生鲜配送平台源码java-nowcoder-project:来自nowcoder的一个基于Redis的SpringBoot项目

    项目的基本框架及配置 创建 git 仓库,本地配置 IDEA 并测试 pull 和 push。 创建 SpringBoot 工程,导入 web,velocity 和 aop 的包。 生成 maven 项目,pom.xml 包含上述依赖。 Controller 中使用注解配置,...

    生鲜配送平台源码java-rushi:问答平台

    项目的基本框架及配置 创建 git 仓库,本地配置 IDEA 并测试 pull 和 push。 创建 SpringBoot 工程,导入 web,velocity 和 aop 的包。 生成 maven 项目,pom.xml 包含上述依赖。 Controller 中使用注解配置,...

    电子商城系统设计实习报告.doc

    但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请 求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的流程,支 持Jsp,Freemarker,...

    利用互相关测速算法计算流体中颗粒速度

    互相关测速算法(Cross-Correlation Velocity Measurement Algorithm)是一种用于计算流体中颗粒流速的方法。该算法基于两个传感器之间的互相关分析,通过比较两个传感器之间的信号差异来确定颗粒的运动速度。 在...

    Java Web程序设计教程

    .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开始创建第一个...

    大数据全样而非抽样原理-一文带你了解什么是大数据.pdf

    第⼆个,Velocity,即⾼速,速率快,⼤数据产⽣的速度是很快的,有个知名的说法,即⼤ 数摩尔定律,据测算,现在每两年数据就会翻⼀倍,这个增长量是及其可怕的。第三个,Variety多样性,之前产⽣的数据多半是结构化...

    2D 涡核跟踪 - Gamma 1 - 超快速:使用来自 Graftieaux 的 Gamma 1 识别 2D 涡流-matlab开发

    基于 Sebastian Endrikat ... 这段代码基本上可以做到这一点。 它还通过拟合样条曲线找到最大伽马 1,因此不受矢量场网格分辨率的限制。

    互联网行业大数据分析报告项目信息分析.pptx

    集群、分割、孤立点分析还有其他的算法让我们深入数据内部,挖掘价值。这些算法不仅要处理大数据的量,也要处理大数据的速度 数据挖掘算法 数据挖掘可以让分析员更好的理解数据,而预测性分析可以让分析员根据可视化...

    大数据在政府中的应用.doc

    业界将其归纳为4个"V"——Volume(数据体谅巨大),Variety(数据 种类繁多),Value(价值密度低),Velocity(处理速度快)。 海量数据存储、数据挖掘、图像视频智能分析,都是大数据的重要组成部分。 大数据的...

    大数据在政府中的应用(1).doc

    业界将其归纳为4个"V"——Volume(数据体谅巨大),Variety(数据 种类繁多),Value(价值密度低),Velocity(处理速度快)。 海量数据存储、数据挖掘、图像视频智能分析,都是大数据的重要组成部分。 大数据的...

    [Flash.ActionScript.3.0动画教程

    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 ...

    大数据-关键词.txt

    大数据的4V特点:Volume、Velocity、Variety、Veracity。 2、随着云时代的来临,大数据(Big data)吸引了越来越多的关注。大数据(Big data)通常用来形容一个公司创造的大量非结构化和半结构化数据,大数据分析常...

    AE CS4 CDkey

    Number or Array easeIn(t, tMin, tMax, value1, value2) {t, tMin和tMax 是一个数, value1和value2 是数或数组}返回 值与ease相似, 但只在切入点tMin 的速率为0,靠近tMax 一边是线性的。 Number or Array ...

Global site tag (gtag.js) - Google Analytics