我正在尝试在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>
答案 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
不能用于此目的,因为它无法进行流量控制。