velocity 循环set null

今天很不幸又看到中站一个故障,又是因为在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>

这下,世界清净了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值