首页 > 代码库 > Velocity中避免null引起的数据问题

Velocity中避免null引起的数据问题

请先看下面一段代码:

  1. #foreach($id in [1..50])  
  2.   #set($user = $User.Get($id))  
  3.   $id : ${user.name}  
  4. #end
  5. 上面这段代码中,假设只存在一个id为1的用户,但是却会显示50个id都是1的用户及其名称,因为在 Velocity  中,如果某个赋值语句返回的结果是null,则不改变所赋值的对象值,也就是说 $user 变量会一直保持上一个有效值。

    官方文档中给出解决的办法是将上面的代码改为:

  6.  

    #foreach($id in [1..50])  
    •   #set($user = false)  
    •   #set($user = $User.Get($id))  
    •   $id : ${user.name}  
    • #end 

    还有其他的方法(推荐):

    这个问题终于被我碰上了,根本的解 决方法应该是:

    解决方法:修改velocity.properties

    原配制:directive.set.null.allowed = false

    修改后的配制: directive.set.null.allowed = true

    修改完成后,用#if($diary)即可判断对象是否为空了~~~

    见:http://www.itsmile.net/blog/article_show/20/273559/Velocity-Set-Null-value-method-Foreach