在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提供了基本的模板引擎功能,包括变量替换、控制结构(如if、for、foreach)以及宏定义等。它支持JavaBean和Map对象的直接引用,并且通过Action接口可以方便地进行用户自定义操作。此外,...
2. **分离关注点**:Velocity 允许设计师使用 HTML 和 CSS 进行页面布局,而开发者只需关注数据处理,两者可以独立工作。 3. **强大的上下文**:Velocity 提供了一个上下文对象,用于存储和传递数据到模板。开发者...
这四个JAR文件组合在一起,构成了一个基本的Velocity运行环境。在使用时,通常需要将这些库添加到项目的类路径中,以便Velocity能够正确运行和解析模板。在Web应用中,这通常通过在`WEB-INF/lib`目录下放置这些JAR...
深入学习Velocity,你需要理解以下几个关键点: - **模板解析(Template Parsing)**:Velocity会将模板文件解析为内部的抽象语法树(AST),这个过程是模板执行的基础。 - **MVC模式的应用**:Velocity遵循MVC...
文件中提到了一些中文资料,如《VelocityJava开发指南中文版》、《Velocity模板使用指南中文版》等,这表明Velocity社区提供了相当完善的中文资料,有助于Java开发者更快速地学习和掌握Velocity的使用方法。...
4. **VelocityEngine**:这是 Velocity 的主入口点,负责加载并解析模板,以及管理其他配置项。你可以通过 VelocityEngine 对象初始化 Velocity,并设置相关的属性,如模板路径、缓存策略等。 5. **MVC 模式**:...
### Velocity 模板引擎知识点详解 #### 一、Velocity简介 Velocity是一款强大的基于Java的模板引擎,它允许用户...通过学习这些基本概念和高级技巧,可以更好地利用Velocity模板引擎来提高Web应用的开发效率和质量。
Velocity中文手册.doc提供了对Velocity的详细指导,包括基本语法、指令、宏库的使用、上下文管理、工具引用等内容。手册中可能涵盖以下关键知识点: 1. **基础语法**:讲解VTL的基本元素,如变量引用($variable)、...
在"velocityDemo"这个压缩包中,很可能包含了演示如何使用Velocity的基本示例。通常,一个简单的Velocity模板可能如下所示: ```html $title <h1>Welcome to $company! <p>Your username is $username. ``` ...
在“Velocity模板入门DEMO”中,我们通常会看到以下几个关键概念和知识点: 1. **模板文件**:Velocity模板文件通常以`.vm`为扩展名,其中包含静态文本和VTL指令。模板文件的主要任务是定义页面的布局和结构,通过...
2. **分离关注点**: 通过Velocity,开发者可以将应用程序逻辑与表示层分离,使得代码更易于维护和扩展。 3. **高性能**: 由于Velocity在编译时将模板转换为Java源代码,运行时执行的是已编译的Java代码,因此其性能...
- **引擎(Engine)**: 引擎是 Velocity 的入口点,负责解析模板、设置上下文并生成最终输出。 ### 2. Velocity 语法 - **变量引用**: 变量通常以 `$` 符号开头,例如 `$name`。如果变量未定义,Velocity 将忽略该...
### Velocity Java开发指南知识点概述 #### 一、简介与背景 **Velocity** 是一个基于 Java 的模板引擎,它能够将模型数据与表示层分离,从而让开发者能够更加专注于业务逻辑的编写,而让设计师能够专注于界面的...
Velocity的主要功能可以总结为以下几点: 1. 通过模板引擎分离Java代码和HTML页面,让Web设计者和开发者能并行工作,提高开发效率。 2. Velocity可以用来生成Web页面、SQL、PostScript等输出,也可以作为一个独立的...
### Velocity文档知识点详解 #### 一、Velocity简介与应用场景 **Velocity** 是一款基于Java的模板引擎,旨在简化模板语言的使用,使开发者能够轻松地访问由Java代码定义的对象。Velocity不仅适用于Web站点开发,...
### 使用Velocity进行动态模板渲染的关键知识点 #### 一、Velocity简介与环境搭建 **Velocity**是一种基于Java的模板引擎,用于生成动态HTML页面或其他文本格式的文档。它提供了一种简单而强大的方式来分离业务...
### Velocity 模板引擎知识点详解 ...通过上述知识点的学习,我们可以了解到Velocity的基本用法,包括变量定义、循环、条件判断、格式化、国际化支持等方面的内容。这些知识点是使用Velocity进行高效Web开发的基础。
以上就是基于"Velocity简单案例"所涵盖的一些基本知识点。在实际应用中,开发者可以根据需求深入学习Velocity的更多高级特性,如条件判断、循环、函数调用、自定义工具类等,以实现更复杂的模板逻辑。
学习Velocity Demo,不仅可以了解如何在Java项目中使用Velocity,还能掌握模板引擎的基本原理和最佳实践。通过实际操作,你可以更好地理解如何将Java对象的数据与HTML页面动态结合,实现更灵活的Web页面生成。同时,...