Con Velocity, se vogliamo fare un controllo di un null in un attributo (in questo caso ‘fuel’) di un oggetto (‘car’), con una istruzione simile a:
#if ($car.fuel == null)
Abbiamo due tipi di approcci per realizzare questa condizione.
Approccio 1:
Sfruttare il fatto che l’attributo di un oggetto, se è null Velocity lo valuta come una condizionale false, per cui nel template scriveremo:
#if( ! $car.fuel )
Nota: Questa condizione passerebbe anche se il risultato di car.fuel sia realmente un booleano “false”. Quindi quello che questo tipo di approccio controlla effettivamente è che l’attributo dell’oggetto sia false o null.
Approccio 2:
Sfruttare il fatto che l’attributo di un oggetto, se è null Velocity viene valutato come una stringa vuota in una Quiet Reference Notation, per cui nel template scriveremo:
#if( “$!car.fuel” == “” )
Nota: Questa condizione passerebbe anche se il risultato di car.fuel sia realmente una stringa vuota. Quindi quello che questo tipo di approccio controlla effettivamente è che l’attributo dell’oggetto sia stringa vuota o null
Per cui, combinando i due approcci avremo il modo per controllare se l’attributo dell’oggetto sia solamente null, in questo modo:
#if ((! $car.fuel) && (“$!car.fuel” == “”))
P.S. esiste anche una “custom directive” per controllare se un attributo sia null, usando l’istruzione cf. IfNullDirective, IfNotNullDirective, ma non funziona se aggiungiamo l’istruzione #else if o #else al template:
#ifnull( $car.fuel )
#ifnotnull( $car.fuel )
Nota: Bisogna registrare queste direttive nel velocity.properties:
userdirective = org.apache.velocity.tools.generic.directive.Ifnull
userdirective = org.apache.velocity.tools.generic.directive.Ifnotnull
Una breve introduzione a velocity???