具有布尔返回的Freemarker指令或方法

时间:2017-01-30 07:38:34

标签: java customization freemarker

我正在尝试在Freemarker中创建一个执行布尔检查的自定义指令或方法,例如

<#if foo = 'bar'>
do something
</#if>

应该与

相同
<@mycheck 'bar'>
do somethng
</@mycheck>

我已经在Freemarker中使用了自定义指令和方法,但我没有找到任何方法来使用布尔返回来创建它。

更新

为了更清楚地说明我想要做什么,请考虑以下事项:我想检查模板是否显示在某个URL上。

因此,不是将变量传递到模板中,而是通过if检查,如

<#if location = '/home/bar'>
do something
</#if>

我想这样做更流利

<@location is='/home/bar'>
do somethng
</@location>

1 个答案:

答案 0 :(得分:1)

那里没有任何返回值(除非我们将输出本身视为那个)。您可以编写如下宏:

<#macro mycheck value>
  <#if foo == value>
    <#nested>
  </#if>
</#macro>

然后这应该有效(假设您在数据模型中有一个foo或宏可以看到它的其他地方):

<@mycheck 'bar'>
do somethng
</@mycheck>

TemplateDirectiveModel的解决方案非常相似,但不幸的是,参数必须通过名称(<@mycheck expected='bar'>...或类似的东西)传递,至少从2.3.25开始。您只需在Java中调用<#nested>而不是TemplateDirectiveBody.render(...),而#if当然只是Java if

TemplateMethodModel不能用于此目的,因为它无法进行流量控制。