发布于 2016-05-16 15:30:26 | 400 次阅读 | 评论: 0 | 来源: PHPERZ

在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}

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务