首页 > 学院 > 开发设计 > 正文

Velocity CheckingForNull

2019-11-15 00:25:38
字体:
来源:转载
供稿:网友
Velocity CheckingForNull

Q: I want to check for null, something like this:

#if ($car.fuel == null)

A: There are several apPRoaches. Select the one most suitable depending on what you really want to do.

Approach 1:Use the fact that null is evaluated as a false conditional. (cf.http://velocity.apache.org/engine/devel/user-guide.html#Conditionals)

#if( ! $car.fuel )
  • Note:The conditional will also pass if the result of $car.fuel is the boolean false. What this approach is actually checking is whether the reference isnull or false.

Approach 2:Use the fact that null is evaluated as an empty string in quiet references. (cf.http://velocity.apache.org/engine/devel/user-guide.html#quietreferencenotation)

#if( "$!car.fuel" == "" )
  • Note:The conditional will also pass if the result of $car.fuel is an empty String. What this approach is actually checking is whether the reference isnull or empty.

BTW, just checking foremptycan be achieved by:

#if( "$car.fuel" == "" )

Approach 3:Combine Approach 1 and 2. This will check fornull and null only.

#if ((! $car.fuel) && ("$!car.fuel" == ""))
  • Note:The logic underlying here is that: "(null or false) and (null or > empty-string)" => if true, must be null. This is true because "false and empty-string and not null" is never true. IMHO, this makes the template too complicated to read.

Approach 4:Use a Tool that can check for null (NullTool,ViewNullTool).

#if( $null.isNull($car.fuel) )
  • Note:Of course,NullToolmust be in the Context as $null in this case.

Approach 5:Don't check for null directly, use a self-explaining method.

#if( $car.fuelEmpty )
  • Note:This is my (Shinobu Kawai's) recommended solution. You have to implement the method, but it makes the template so easy-to-read.

public boolean isFuelEmpty(){  // return true if fuel is empty.}

Approach 6:Use a custom directive.cf.IfNullDirective,IfNotNullDirective

#ifnull( $car.fuel )#ifnotnull( $car.fuel )
  • Note:You will have to register the directive in your velocity.properties.

userdirective = org.apache.velocity.tools.generic.directive.Ifnulluserdirective = org.apache.velocity.tools.generic.directive.Ifnotnull

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表