我有一个Customer对象,其布尔属性为letterActivated。 getter方法如下所示,符合标准的java实践。
public Boolean isLetterActivated() {
return letterActivated;
}
但似乎Freemaker没有提取customer.letterActivated
表达式,我想这可能是因为我没有getLetterActivated方法。 (注意,客户对象的其他表达式工作正常,都有***方法)。
我应该如何从FTL引用这个布尔变量?请注意,我无法更改getter方法名称(isMobileBillingAccount),因为它在现有代码中并在许多地方引用。这也是我猜测布尔getter的正确方法。
答案 0 :(得分:4)
使用public boolean isLetterActivated()
或public Boolean getLetterActivated()
。根据JavaBeans规范,Boolean
+ is
组合未定义JavaBean属性。您无需更改名称,只需添加正确的getter即可。或者作为最后一次机会,您可以在FTL中使用customer.isLetterActivated()
。
答案 1 :(得分:1)
布尔getter也可以是名称getXXX
..正如您所说,还有其他引用引用现有方法isLetterActivated
。我建议这样做,因为其他参考文献超出了你的范围。
public boolean getLetterActivated() {
return this.isLetterActivated();
}
这样你就不会搞乱现有代码而新代码可以使用新方法......但我认为这是一个糟糕的设计。但鉴于这种情况,我建议你去做。
答案 2 :(得分:0)
${customer.letterActivated?c}
使用isLetterActivated()
和
如果值为true
,则显示“true”。
以下代码对我来说也没有任何问题(在freemarker 2.3.20中测试)
<#if (customer.letterActivated)!false>
Great letter is activated! ${customer.letterActivated?c} man
<#/if>
()!false
部分仅用于处理null
值。
来自freemarker编译器的更多信息:
Freemarker编译器输出
无法自动将布尔值转换为字符串,因为“boolean_format”设置为“true,false”,这是传统的默认计算机语言格式,因此不被接受。
提示:如果您只是想要生成计算机语言输出时出现“true”/“false”结果,请使用“?c”,例如$ {myBool?c}。
提示:您可以编写myBool?string('yes','no')并喜欢指定布尔格式。
提示:如果在大多数地方需要相同的两个值,程序员应将“boolean_format”设置设置为“yes,no”。