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

Velocity 1.6引入严格引用模式的概率,通过设置Velocity配置属性“runtime.references.strict”为true激活。在未定义或歧义的情况下,Velocity将抛出异常。使用该设置引用必须明确放置在context中或使用#set指令定义或抛异常。引用在context中有一个null值将不会产生一个异常。此外,如果试图调用不存在的方法或属性将抛出异常。如果试图调用的对象是null抛出异常。

在下面的例子中,$bar已定义,$foo未定义,所有这些语句将抛出异常:

$foo                         ## Exception

#set($bar = $foo)            ## Exception

#if($foo == $bar)#end        ## Exception

#foreach($item in $foo)#end  ## Exception

当试图调用的方法或属性不存在时Velocity抛出异常。在这种情况下,$bar包含一个对象定义一个属性"foo"返回一个字符串,而retnull防御null。

$bar.bogus          ## $bar没有bogus属性,Exception

$bar.foo.bogus      ## $bar.foo没有bogus属性,Exception

$bar.retnull.bogus  ## 不能在null上调用属性,Exception

#if和#elseif指令中的引用比较特殊:

#if ($foo)#end                  ## False

#if ( ! $foo)#end               ## True

#if ($foo && $foo.bar)#end      ## False并且$foo.bar将不会计算

#if ($foo && $foo == "bar")#end ## False并且$foo == "bar"将不会计算

#if ($foo1 || $foo2)#end        ## False $foo1并且$foo2将不会计算

严格模式必须在#if指令中包含>、<、>=或<=。同时,参数#foreach必须迭代(该行为能修改属性 directive.foreach.skip.invalid)。最后,在严格模式下,未定义宏引用也将抛出异常。

this is $foo    ## 抛出异常,因为$foo是null

this is $!foo   ## 渲染为"this is "没有异常

this is $!bogus ## bogus不在context中,因此抛出异常

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

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