2017-01-30 105 views
0

我想在Freemarker中創建一個自定義指令或方法來執行布爾檢查,例如,Freemarker指令或布爾返回方法

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

應equaivilant到

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

我已經與定製指令和方法Freemarker的工作,但我沒有發現任何方式與布爾返回創建此。

UPDATE

爲了使它更清楚我想做的事情,考慮以下問題:我想在一個模板來檢查它是否在某個URL顯示。

因此,而不是傳遞變量到模板,並檢查通過,如果像

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

我想這樣做一點更流暢這樣

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

回答

1

您沒有任何回報價值在那裏(除非我們認爲產出本身就是這樣)。你可以寫這樣的宏:

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

,然後這應該工作(假設你在數據模型中的foo或其他地方,其中宏可以看到它):

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

解決方案與TemplateDirectiveModel是非常相似的,除了不幸的是參數必須通過名稱(<@mycheck expected='bar'>...或類似的東西)傳遞,至少從2.3.25。代替<#nested>,您只需在Java中調用TemplateDirectiveBody.render(...),而#if當然只是Java if

TemplateMethodModel不能用於此目的,因爲它不能進行流量控制。

+0

其實我需要通過directie或方法來做到這一點,因爲我需要對輸入參數進行編程檢查。 – svenkubiak

+0

我已經更新了我的答案來解決這個問題。 – ddekany

+0

謝謝。然後我會再檢查模型。但實際上我並不清楚模型如何進行布爾檢查,因爲模型根本不返回布爾值。通過模型,看起來我可以處理在執行方法中做的事情,而不是在模板中。 – svenkubiak