Вопрос

Есть ли способ выполнять троичные операторы в Velocity?Это то, что я хотел бы сделать:

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

Вместо коренастого if-else

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

Есть какие-нибудь идеи?

Это было полезно?

Решение

Исходя из опыта и чтения Ссылка на VTL нет никакого способа сделать это.Если бы у вас было много подобных заданий, возможно, вы могли бы взглянуть на определение вашего собственного velocimacro, чтобы попытаться избежать повторения if else .

Например, если макрос печатает только одну строку, вы могли бы выполнить следующее:

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

Двойные кавычки вокруг вызова макроса важны, поскольку это означает, что RHS #set проанализирован.

Другие советы

В конце концов я сделал так, как ты сказал, Марк:

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

И тогда я могу назвать это вот так:

#set ($name = "#condOp($args.get(0), 'default')")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top