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.
3 réponses
Vous pouvez faire
#set($value = "#if($flag)red#{else}blue#end")
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
#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.