Here are some requests for null support in Velocity. Here is the discussion about this on the developer list.
The word "null" should be treated as null in Velocity specific content
#set ($list = ["one", null, "three"])
should make a 3 element list, with the elements "one", null and "three".
should call the "bar" method of the "foo" object with a null parameter.
- An unreferenced reference is treated as null, so
#set ($list = ["one", $somevariablenamethatneverwillbeused, "three"])and
$foo.bar($somevariablenamethatneverwillbeused)will do as the above.
The "if" directive should be able to compare references with null
#if ($foo == null) foo is null #end
foo is null
if foo was not in the Context.
#if ($foo != null) foo is not null #end
foo is not null
if foo was in the Context.
#ifnull ($foo) foo is null #endand
#ifnotnull ($foo) foo is not null #endwill do as the above.
Many others are listed at CheckingForNull.
The "set" directive should accept null value as the RHS.
For example: Assuming that $bar wasn't in the Context,
#set ($foo = $bar) #set ($foo = null)
should both remove "foo" from the Context, and
#set($map.foo = $bar) #set($map.foo = null)
should both set the "foo" property of "$map" to null.
- Setting null by invoking Context#remove(), or setter methods with null. Assuming that the Context was $ctx,
$ctx.remove("foo") $map.put("foo", $bar) $map.setFoo(null)
$null.setNull("foo")will do as the above.
Note: NullTool can't set properties to null.
Bugzilla #20999 contains a patch to give this behaviour.
It is also stated in bugzilla that you can achieve this by using the EventCartridge, but I can't figure out how. I'm hoping somebody will post a code snipplet for us.
The "foreach" directive should set null when the element is null
Currently, it preserves the last element.
#set ($list = ["one", null, "three"]) #foreach ($foo in $list) $!foo #end
#foreach ($foo in $list) $!foo $null.setNull("foo") #endwill do as the above.
Bugzilla #27741 contains a patch to give this behaviour.
null and the empty string should be totally equivalent
Comment from Nathan about the null keyword and the if directive support:
- -0 i'm not totally against it, but i'm instinctively uncomfortable with using this programming concept in a template language. personally, i've always felt in a display-oriented language, null and the empty string should be totally equivalent. but that is already not the case, so i can't really be -1 on this.