Velocity模板引擎#set在#foreach中无法赋值null问题
在使用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>声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
