在自由标记中使用三元运算符?

2022-08-31 20:09:39

我只想做这样的事情:

<a href="${ a? 'a.htm' : 'b.htm'}">

答案 1

如果您使用的是 freemarker 2.3.23 或更高版本,则可以使用当时的内置:

<a href="${a?then('a.htm','b.html')}" target="${openTarget}">

如果您使用的是较旧版本的 freemarker,则可以改用内置字符串

<a href="${a?string('a.htm','b.html')}" target="${openTarget}">

当应用于布尔值时,内置将充当三元运算符。string



答案 2

如果您使用的是 2.3.23 之前的较旧 Freemarker 版本,则可以使用此宏,它提供了一种执行三元运算的简单方法:

<#macro if if then else=""><#if if>${then}<#else>${else}</#if></#macro>

它易于使用,看起来不错,可读性很强:

<@if someBoolean "yes" "no"/>

请注意,它是 - 而不是内置指令中的一样。下面是一些其他示例。@if#if

<!-- `else` is optional -->
<@if someBoolean "someBoolean is true"/>  

<!-- expressions -->
<@if (someBoolean||otherBoolean)  "hello,"+user.name  1+2+3 />  

<!-- with parameter names -->
<@if someBoolean then="yes" else="no" />  

<!-- first in list? -->
<#list seq as x>
    <@if (x_index==0)  "first"  "not first"/> 
<#list> 

出于某种原因,如果无名参数是非布尔表达式,则无法在无名参数周围添加括号。这可以进一步提高可读性。


推荐