33

我经常遇到字符串值不存在和/或为空的情况。这是测试这种情况的最佳方法吗?

#if( $incentive.disclaimer && $!incentive.disclaimer != '' ) 
   $incentive.disclaimer 
#end
4

3 回答 3

44

如果您只想让 Velocity 显示值(如果存在),或者如果不存在则不显示任何内容,那么安静的引用本身就可以解决问题:

$!incentive.disclaimer

如果您想明确地测试空,来自Apache Commons Lang的StringUtils可以提供帮助。首先将它添加到您的上下文中(参考这里):

context.put("StringUtils", StringUtils.class);

虽然如果您使用的是旧版本的 Velocity,它可能不喜欢类引用,因此您可以添加一个实例:

context.put("StringUtils", new StringUtils());

然后你可以从你的 Velocity 模板中调用它的isEmpty方法:

#if($StringUtils.isEmpty($incentive.disclaimer))
    ## logic here...
#end

如果您希望将空格视为空,还有isBlank

于 2012-10-31T14:35:51.433 回答
40

对于$!incentive.disclaimer不适合http://wiki.apache.org/velocity/CheckingForNull的情况,建议使用一个简短的解决方案:

#if( "$!car.fuel" != "" )
于 2012-11-29T15:50:37.920 回答
16

你想要安静的参考符号:$!incentive.disclaimer

Bla bla $!incentive.disclaimer. 

如果$incentive.disclaimernull"",Velocity 将呈现:

Bla bla .

参考官方指南部分: https ://velocity.apache.org/engine/devel/user-guide.html#quiet-reference-notation

有时你确实需要#if

最常见的情况是您确实需要#if:您的变量只是一段较大文本的一部分,并且如果变量为空,您不想显示它。然后你需要这个:

#if($incentive.disclaimer && !$incentive.disclaimer.empty) 
    Please read our incentive disclaimer:
    $incentive.disclaimer
#end
于 2014-02-14T13:48:24.827 回答