如何在Velocity中进行内联if/otherwise(又名三元运算符)?

Mic*_*ael 33 java velocity if-statement

在纯Java中,我可以这样做:

value = (a > b) ? a : b;
Run Code Online (Sandbox Code Playgroud)

而在Velocity中,长形式将是:

#if($a > $b)          
    #set($value = $a)
#else
    #set($value = $b)
#end
Run Code Online (Sandbox Code Playgroud)

Velocity中有简短形式吗?我希望能够做一个if/other inline.

aio*_*obe 46

你可以做

#set($value = "#if($flag)red#{else}blue#end")
Run Code Online (Sandbox Code Playgroud)


KSe*_*Sev 19

您不需要#macro或#set指令.关键是使用大括号表示#else指令.

#if($plural)were#{else}was#end
Run Code Online (Sandbox Code Playgroud)

doc(几乎在条件部分的末尾):

一个更有用的说明.如果希望在#else指令后立即包含文本,则需要在指令周围使用大括号,以区别于以下文本.(任何指令都可以用大括号分隔,尽管这对#else最有用).

注意:无论文档说什么,我都发现在使用简单的内联if语句时可能需要添加大括号.

#if($includePrefix)Affected #{end}Inspection
Run Code Online (Sandbox Code Playgroud)


Vad*_*zim 7

还有一种可重用宏的方法:

#macro(iif $cond $then $else)#if($cond)$then#else$else#end#end
Run Code Online (Sandbox Code Playgroud)

然后

#define ($value)
#iif("$a > $b", $a, "$b")
#end
Run Code Online (Sandbox Code Playgroud)

请注意,velocity docs指出使用宏会对性能产生一些影响.