2009-07-13 11 views
10

Existe-t-il un moyen de faire des opérateurs ternaires dans Velocity? Voilà ce que je voudrais faire:Opérateur conditionnel dans Velocity

#set ($name = ($args.get(0) == "") ? "default" : $args.get(0)) 

lieu d'épaisses if-else

#if ($args.get(0) == "") 
    #set ($name = "default") 
#else 
    #set ($name = $args.get(0)) 
#end 

Toutes les idées?

Répondre

6

Pour l'expérience et en lisant le VTL Reference il n'y a aucun moyen de le faire. Si vous avez eu beaucoup de devoirs comme ceci, vous pourriez peut-être essayer de définir votre propre velocimacro pour essayer d'éviter de répéter le cas échéant.

Par exemple, si la macro imprime une seule chaîne que vous pouvez effectuer les opérations suivantes:

#set ($name = "#condOpt($args.get(0), "default")") 

Les guillemets doubles autour de l'appel de macro sont importants, car cela signifie que l'ERS de l'#set est analysé.

+0

Y at-il un moyen d'obtenir une macro pour agir comme une fonction? Alors que ça va retourner une variable? Pour que je puisse faire '#set ($ name = condOpt ($ args.get (0)," default "))' Si j'ai fait la macro, vérifiez $ args.get (0) 'pour voir si elle était vide ou non. – peirix

+0

Si la macro imprime une seule chaîne, vous pouvez la définir comme nom. Voir la modification à ma réponse. – Mark

+0

Yup. Ce sont ces doubles guillemets autour de l'appel macro qui m'ont attrapé. Fixé et fonctionne maintenant. Merci (: – peirix

2

je fini par faire comme vous l'avez dit, Mark:

#macro(condOp $check, $default) 
    #if ($check == "") 
     $default 
    #else 
     $check 
    #end 
#end 

Et puis je peux l'appeler comme ceci:

#set ($name = "#condOp($args.get(0), 'default')") 
+0

Vous êtes en train d'ajouter cela au moment où je rédigeais ma réponse avec le même exemple !! – Mark