Velocity中判断表达式是否为空
在写模版文件判断数据是否为空的时候,想当然的写成了下面的代码。
#if(${data} != null)
...
#end
结果Velocity解析时抛出了如下错误:
Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "null" at generator file[line 7, column 27]
一查Velocity的语法说明,原来Velocity判断null和java是不一样的。
总统上说,判断是否为null有下面几种方法:
1. #if (! $foo) 判断$foo为空,判断非空为 #if ($foo)
2. 使用 #ifnull() 或 #ifnotnull()
#ifnull ($foo)
要使用这个特性必须在velocity.properties文件中加入:
userdirective = org.apache.velocity.tools.generic.directive.Ifnulluserdirective = org.apache.velocity.tools.generic.directive.Ifnotnull
3. 使用null工具判断
#if($null.isNull($foo))
注意这种方式特别有用,尤其你在需要这个判断作为一个判断字句时,比如我要你判断一个集合为null或为空时只能使用这种方式了:
$if ($null.isNull($mycoll) || $mycoll.size()==0)