Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jakarta-velocity Wiki" 
for change notification.

The following page has been changed by ShinobuKawaiYoshida:
http://wiki.apache.org/jakarta-velocity/CheckingForNull

The comment on the change is:
extract page : CheckingForNull

New page:
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.  (Thanks, everybody, for all the 
[http://nagoya.apache.org/eyebrowse/[EMAIL PROTECTED]&by=thread&from=949954 
feedback on the user list].)
See also:
[http://issues.apache.org/bugzilla/show_bug.cgi?id=20999 Bugzilla #20999],
[http://issues.apache.org/bugzilla/show_bug.cgi?id=27741 Bugzilla #27741].  

'''''Approach 1:''''' Use the fact that null is evaluated as a false 
conditional.  (cf. 
http://jakarta.apache.org/velocity/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 is '''null or false'''.

'''''Approach 2:''''' Use the fact that null is evaluated as an empty string in 
quiet references.  (cf. 
http://jakarta.apache.org/velocity/user-guide.html#Quiet%20Reference%20Notation)
{{{
#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 
is '''null or empty'''.
BTW, just checking for '''empty''' can be achieved by:
{{{
#if( "$car.fuel" == "" )
}}}

'''''Approach 3:''''' Combine Approach 1 and 2.  This will check for '''null 
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, NullTool must 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.Ifnull
userdirective = org.apache.velocity.tools.generic.directive.Ifnotnull
}}}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to