Comment faire un inline if/otherwise (alias opérateur ternaire) dans Velocity?

En Java pur, je pourrais faire ceci:

value = (a > b) ? a : b;

alors que dans la vitesse, la forme longue serait:

#if($a > $b)          
    #set($value = $a)
#else
    #set($value = $b)
#end

y a-t-il une forme courte dans la vitesse? Je veux être capable de faire un si/sinon inline.

31
demandé sur aioobe 2011-02-15 17:40:51

3 réponses

Vous pouvez faire

#set($value = "#if($flag)red#{else}blue#end")
41
répondu aioobe 2016-08-09 12:52:23

vous n'avez pas besoin d'une directive #macro ou #set. La clé est d'utiliser des crochets bouclés pour la directive #else.

#if($plural)were#{else}was#end

doc (presque à la fin de la section des conditions):

encore une note utile. Lorsque vous souhaitez inclure du texte immédiatement après une directive #else, vous devrez utiliser des crochets bouclés entourant immédiatement la directive pour la différencier du texte suivant. (Toute directive peut être délimitée par curly entre parenthèses, bien que cela soit très utile pour #else).

NOTE: indépendamment de ce que le doc dit, j'ai depuis constaté qu'il peut être nécessaire d'ajouter les crochets bouclés lors de l'utilisation d'un simple inline if statement.

#if($includePrefix)Affected #{end}Inspection
13
répondu KSev 2016-07-14 22:27:37
#macro(iif $cond $then $else)#if($cond)$then#else$else#end#end

#define ($value)
#iif("$a > $b", $a, "$b")
#end

notez que velocity docs déclare que l'utilisation de macros implique un certain impact sur la performance.

5
répondu Vadzim 2012-08-31 07:56:50