【问题标题】:If-else statement inside a parameter of a freemarker macro?freemarker宏的参数内的if-else语句?
【发布时间】:2015-06-24 00:18:28
【问题描述】:

是否可以在 freemarker 宏的参数中包含 if/else 语句?

我现在有:

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

这是相当多的代码行,是否可以通过将 if/else 构造作为参数来缩短这一点,例如:

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

【问题讨论】:

标签: java if-statement freemarker


【解决方案1】:

更新:从 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') /]

【讨论】:

  • 这似乎在非 freemarker 范围内有效,但是当您将它用作宏的参数时,它不起作用(= 在 freemarker 范围内):被调用者:期望一个方法,但是这被评估为一个字符串(包装器:ftSimpleScalar)。奇怪!
  • 为我工作...我在上面添加了一个完整的示例。如果还是看不到问题,能否引用完整的错误信息和实际 FTL 的相关部分?
  • 感谢您的回答!我一直在寻找某事。像 C 的? : 运算符,这正是可以使用的。
猜你喜欢
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多