Velocity模板引擎#set在#foreach中无法赋值null问题

原创 2014年06月21日 16:32:59

在使用Velocity模板引擎作为Web应用页面渲染引擎,经常会遇到由于Velocity语法不够强大,导致莫名其妙问题。


比如在#foreach无法break。特别隐藏的问题是#foreach中使用#set无法清空临时set对象。

<span style="font-family:Microsoft YaHei;font-size:12px;">#foreach($item in $!itemList)
	#set($xp = $!itemPriceMap.get($!{item.id}))
	// ...			
#end</span>

如上代码中,如果itemPriceMap中不包含循环中的item,$xp在循环中还会保持上次循环的值。

所以一个引用被创建后,一般无法移除。


解决方案:

If the RHS is a property or method reference that evaluates to null, 
it will not be assigned to the LHS. Depending on how Velocity is configured, 
it is usually not possible to remove an existing reference from the 
context via this mechanism. (Note that this can be permitted by changing 
one of the Velocity configuration properties). 

在velocity.properties里加入directive.set.null.allowed = true。

<service name="VelocityService" class="com.xxx.DefaultVelocityService" earlyInit="true">
	<property name="input.encoding" value="GBK"/>
    <property name="parser.pool.size" value="100"/>
	<property name="directive.set.null.allowed" value="true"/>
	.......
</service>


相关文章推荐

velocity foreach用法

#set( $result = ${list}) #set ($i=0) #foreach($onlineData in ${onlineDataList}) $result.get($i) #s...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...

CT图像重建技术

由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术 1.引言 计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串  find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|xargs g...

Radon变换入门matlab CT原理

http://hi.baidu.com/hi9394/blog/item/0d492b8bfd714700c8fc7aa9.html 简介 图像投影,就是说将图像在某一方向上做线性积分(或理解为累...

Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法

上午新建excel工作表时,发现新建完之后居然打不开 提示: 尼玛这坑爹的,难道我的Excel坏了?? 排查问题之后发现 只有新建“Microsoft Excel 工作表”时...

js弹出框、对话框、提示框、弹窗总结

js弹出框、对话框、提示框、弹窗总结 一、JS的三种最常见的对话框 [javascript] view plaincopy //=...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Velocity模板引擎#set在#foreach中无法赋值null问题
举报原因:
原因补充:

(最多只允许输入30个字)