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>
这下,世界清净了。
症状如下:
#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>
这下,世界清净了。
相关文章推荐
- 【单片机笔记】51串口printf的使用和变量循环问题
- C++在多线程中使用UINT做循环判断变量的不确定性问题
- Java使用Velocity模板发送HTML格式邮件并解决中文乱码问题
- 数组循环移动代码,只使用一个临时变量
- shell 循环中使用管道符的变量问题
- 内外循环使用同名变量问题
- velocity模板语言之变量的赋值与使用区别小论
- Dom动态添加事件,不能使用循环变量的问题
- 使用 let 解决for 循环闭包 i变量问题
- 解决Django模板无法使用perms变量问题的方法
- [smarty] 在smarty模板中使用smarty变量初始化 javascript 变量的问题
- Django模板无法使用perms变量问题解决办法详解
- 不使用临时变量的情况下,两个变量之间交换值的问题
- THinkPHP在模板中的volist循环使用外部变量注意事项
- springboot使用velocity模板乱码问题
- 使用临时表 + 循环展 BOM
- Django 模板中变量、过滤器、标签的使用方法
- jstack简单使用,定位死循环、线程阻塞、死锁等问题
- DEDE模板中如何运行php脚本和php变量的使用
- Angular2基础02:模板引用变量的使用