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

时间:2011-02-15 14:40:51

标签: java if-statement velocity

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

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

而在Velocity中,长形式将是:

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

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

3 个答案:

答案 0 :(得分:45)

你可以做到

#set($value = "#if($flag)red#{else}blue#end")

答案 1 :(得分:17)

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

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

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

  

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

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

#if($includePrefix)Affected #{end}Inspection

答案 2 :(得分:5)

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

#macro(iif $cond $then $else)#if($cond)$then#else$else#end#end

然后

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

请注意,velocity docs声明使用宏会对性能产生一些影响。