2015-04-17 54 views
3

是否有可能在freemarker宏的參數中有if/else語句?如果在freemarker宏的參數內的else語句?

我現在有:

[#if myForm.id==0] 
[#assign action = "add"] 
[#else] 
[#assign action = "change"] 
[/#if] 
[@printForm action /] 

這是相當多的代碼行,是有可能通過將的if/else構造作爲參數有點縮短這個,是這樣的:

[@printForm [if]add[#else]change[/#if] /] 
+0

退房kapep在這個鏈接的回答:HTTP://計算器。 com/questions/17539686/use-ternary-operator-in-freemarker這可能有幫助 – Ogen

+0

感謝@Ogen,看起來很有希望,我打算試試這個! – TinusSky

回答

2

更新:從FreeMarker 2.3.23開始,您應該使用condition?then(whenTrue, whenFalse)作爲三元運算符。這可以有一個非字符串結果,並懶惰評估其參數。

在FreeMarker的,你可以處理這個作爲一個布爾值格式化任務:[@printForm (myForm.id == 0)?string('add', 'change') /]

更新: 這是一個完整的工作示例:

[#ftl] 
${.version} 

[#macro printForm s] 
s: ${s} 
[/#macro] 

[#assign myForm = { "id": 0 } ] 

[@printForm (myForm.id == 0)?string('add', 'change') /] 
+0

這似乎在非freemarker範圍內工作,但是當您將它用作宏的參數時它不起作用(=在freemarker範圍中):callee:期望一個方法,但是這會計算爲一個字符串(包裝器:ftSimpleScalar).Strange! – TinusSky

+0

適用於我...我在上面添加了一個完整的示例。如果您仍然看不到問題,您是否可以引用完整的錯誤信息和實際FTL的相關部分? – ddekany

+0

感謝您的回答!我在找s.th.像C的? :運營商,這正是可以使用的。 –