Velocity e il controllo di un attributo null

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

One thought on “Velocity e il controllo di un attributo null

Lascia un commento