Velocity入门指南——第三章 引用

作者:无名    it人知识库   2020-09-16 00:00:00

在VTL中,有三种类型的引用:变量、属性和方法。

1    变量

变量的速记符号由前导“$”字符后随VTL标识符组成。VTL标识符必须以字母开头,其它合法字符包含:

  • 字母

  • 数值

  • 连字符

  • 下划线

下面是VTL中有效的变量引用:

$foo

$mudSlinger

$mud-slinger

$mud_slinger

$mudSlinger1

当VTL引用一个变量时,例如$foo,变量能从模板中的set指令或Java代码中的Context获取值。

#set( $word = "Hello Velocity!" )

${word}

2    属性

代码:

Velocity.init();
VelocityContext context = new VelocityContext();
User user = new User();
user.setUsername("xxxx");
context.put( "user", user);
Template template = Velocity.getTemplate("src/main/java/com/study/velocity/Properties.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
System.out.println(sw);


public class User {

    private String username;

    public String getUsername() {
        System.out.println("do get");
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    
}

模板:

$user.username

输出结果:

do get
xxxx

由上面的结果表明,$user.username调用的就是user的getUsername方法。

3    方法

方法引用由前导“$”字符后随VTL标识符和VTL方法体。VTL方法体由VTL标识符后随左圆括号、可选参数列表、右圆括号。下面是有效的VTL:

$sun.getPlanets()

$annelid.getDirt()

$album.getPhoto()

$sun.getPlanet( ["Earth", "Mars", "Neptune"] )

$sisyphus.pushRock()

$book.setTitle( "Homage to Catalonia" )

4    属性查找规则

就像前面所说的,属性通常引用父对象的方法。Velocity很聪明,计算请求属性的方法。它基于命名规则查找方法。期望的查找序列依赖于是否属性名开始与大写字母。对于小写字母,例如$customer.address的顺序是:

  1. getaddress()

  2. getAddress()

  3. get("address")

  4. isAddress()

对于大写字母稍有不同:

  1. getAddress()

  2. getaddress()

  3. get("Address")

  4. isAddress()

5    渲染

每个引用(无论变量、属性或方法)最后产生的值转换为字符串对象。如果一个对象是Integer,那么Velocity将调用它的.toString()方法解析对象为字符串。

6    下标表示法

使用下标形式$foo[0]能用于访问指定索引的对象。这种形式的同义词在指定对象上调用get(Object)方法上一致,例如$foo.get(0)

$foo[0]       ## $foo takes in an Integer look up
$foo[$i]      ## Using another reference as the index
$foo["bar"]   ## Passing a string where $foo may be a Map

括号语法也适用于Java数组,因为Velocity包装数组在访问对象中,提供get(Integer)方法返回指定元素。

括号语法在任何适用.get的地方都是有效的,例如:

$foo.bar[1].junk

$foo.callMethod()[1]

$foo["apple"][4]

引用也可以使用索引设置,例如:

#set($foo[0] = 1)

#set($foo.bar[1] = 3)

#set($map["apple"] = "orange")

7    正规引用符号

上面的引用符号都是缩写,正式的引用符号如下所示:

${mudSlinger}

${customer.Address}

${purchase.getTotal()}

大多数情况下,可以使用缩写,但是在一种情况下,必须使用正式写法。

Jack is a $vicemaniac.

上面的例子中,变量是vicemaniac,但是我们实际想要的是vice,此时,我们可以在变量前后加上中括号来表示这个变量。

Jack is a ${vice}maniac.

8    处理未定义引用

当Velocity遇到了未定义的引用时,默认会原样输出引用。可以使用以下方式使其输出空串。

$!email

$!{email}

这篇内容就是由it人知识库 小编为各位整理 原文链接:https://m.itpeo.net/15310/3710244.html

Tag:入门指南第三引用援用



我要分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

JAVA程序员面试32问(附答案)(转载)

JAVA程序员面试32问(附答案)(转载)

第一,谈谈final, finally, finalize的区别。       第二... ...

qq项目第一天(java JFrame 标题栏 最小化 最大化 拖动窗体)

qq项目第一天(java JFrame 标题栏 最小化 最大化 拖动窗体)

运行结果截图: 源码暂时不上传,有希望一起学习的 可以加:151648295 今天本来不止做这么... ...

设计模式--->工厂模式

设计模式--->工厂模式

静态工厂模式: public interface Car {  pub... ...

设计模式--->观察者模式

设计模式--->观察者模式

   观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模... ...

方正T630NVUT630N-440

方正T630NVUT630N-440

<iframe name="google_ads_frame" marginwidth="0" marginhei... ...

学习笔记-android imageSwitcher使用

学习笔记-android imageSwitcher使用

照片切换控件imageSwitcher实现照片上一张、下一张的切换,使用时要实现ViewFactory接口,从而将显示的... ...

ORACLE闪回功能开启和使用

ORACLE闪回功能开启和使用

闪回功能在ORACLE中默认是关闭的,需要按照下面的方式开启: Sql>startup mount Sq... ...

openfire 源代码搭建 开发环境(一)

openfire 源代码搭建 开发环境(一)

1、搭建好java开发环境,要求是在jdk1.6以上   2、在http://www.ignit... ...

[Repeater]导出为excel格式

[Repeater]导出为excel格式

Repeater导出为excel格式 数据绑定到Repeater1 ,下面是将Repeater1的内容导出的示例代码 ... ...

ADO.NET的主要组件

ADO.NET的主要组件

ADO.NET提供了用于访问和操作数据的两个主要组件是 .NET Framework 数据提供程序和 DataSe... ...

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量... ...

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(三)

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(三)

C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) C++11新特性中的匿名函数Lambda表... ...

[zt]Ajax 和 XML: 五种常见 Ajax 模式

[zt]Ajax 和 XML: 五种常见 Ajax 模式

可立即使用这些非常有用的 Ajax 设计模式 ... ...

MDA:Jean网站上的定义和资源

MDA:Jean网站上的定义和资源

继续纠缠MDA的定义 转自 http://www.sciences.univ-nantes.fr/info/lrsg... ...

Spring Framework 4.0M1 & 3.2.3 发布了[翻译]

Spring Framework 4.0M1 & 3.2.3 发布了[翻译]

今天早上去SpringSource官网,发现Spring Framework 4.0发布了,我认为最重要的两个特性... ...

简单说一下Jfinal Model静态dao对象误用的问题

简单说一下Jfinal Model静态dao对象误用的问题

   最近有很多jfinal的使用者在误用model静态dao,这里简单的说一下这个问题, @... ...

职业生涯第二年回顾(2011.2~2012.2)

职业生涯第二年回顾(2011.2~2012.2)

 算不上什么工作总结和技术总结,只是大致回顾这1年记忆中的事情。    一... ...

使用import简化spring的配置文件 (转载)

使用import简化spring的配置文件 (转载)

Spring中用import导入配置文件 原文地址:使用import简化spring的配置文件 (转载)作者:瓦砾... ...

每天十分钟,十二天入门Python(十)

每天十分钟,十二天入门Python(十)

# __str__() class Dog(object):     de... ...

JQuery:deferred对象的方法

JQuery:deferred对象的方法

(1) $.Deferred() 生成一个deferred对象。 (2) deferred.done() 指... ...

最新IT资讯

必填

◎已有 0 人评论


电脑版

版权所有:IT人知识库 m.itpeo.net

返回顶部

本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点,如有侵权请联系我们删除