Freemarker布尔属性检索

时间:2013-10-12 03:00:29

标签: java java-ee freemarker

我有一个Customer对象,其布尔属性为letterActivated。 getter方法如下所示,符合标准的java实践。

public Boolean isLetterActivated() {
    return letterActivated;
}

但似乎Freemaker没有提取customer.letterActivated表达式,我想这可能是因为我没有getLetterActivated方法。 (注意,客户对象的其他表达式工作正常,都有***方法)。

我应该如何从FTL引用这个布尔变量?请注意,我无法更改getter方法名称(isMobileBillingAccount),因为它在现有代码中并在许多地方引用。这也是我猜测布尔getter的正确方法。

3 个答案:

答案 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”。