您的位置:首页 > 其它

velocity模板里循环使用set null给临时变量的问题

2010-09-01 17:40 281 查看
今天很不幸又看到中站一个故障,又是因为在velocity模板中,foreach循环里set临时变量碰到null的问题

症状如下:

#foreach($x in $list) ## 1

#set ($temp = $x) ## 2 设置临时变量的值

$temp
## 3 输出临时变量的值

#end
## 4

在行2的地方,如果设置的值$x 为null,

这时候$temp的值不会被重置,而是保留为循环中上一次赋的值!!

这个问题,中文站出现过好几次,导致不同的故障,我搜索了一下我们的confluence,发现国站也出现过

原因很简单,因为现在的velocity版本里,为了兼容老的版本,默认是不允许在循环中设置null值给临时变量

解决办法很简单,在velocity.properties里加入directive.set.null.allowed
= true,具体到我们的环境里,就是

在webx.xml中的VelocityService里加入该属性,例如:

<service
name="VelocityService"
class="com.alibaba.service.velocity.DefaultVelocityService"
earlyInit="true">

<property
name="file.resource.loader.path"
value="/templates/esite"/>

<property
name="file.resource.loader.cache" value="true"/>

<property
name="directive.if.tostring.nullcheck" value="false"/>

<property name="directive.set.null.allowed"
value="true"/>

.......

</service>

这下,世界清净了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: