4

我有一个具有布尔属性 letterActivated 的客户对象。根据标准 java 实践,getter 方法如下所示。

public Boolean isLetterActivated() {
    return letterActivated;
}

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

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

4

3 回答 3

4

使用public boolean isLetterActivated()public Boolean getLetterActivated()Boolean+is组合没有根据 JavaBeans 规范定义 JavaBean 属性。您不必更改名称,只需添加正确的 getter。或者作为最后的机会,您可以customer.isLetterActivated()在 FTL 中使用。

于 2013-10-12T08:08:05.923 回答
1

boolean getter 也可以是名称getXXX。正如您所说,还有其他引用引用了现有方法isLetterActivated。我建议这样做,因为其他参考超出了您的范围。

public boolean getLetterActivated() {
    return this.isLetterActivated();
}

这样你就不会弄乱现有的代码,新的代码可以使用新的方法......但我认为这是一个糟糕的设计。但鉴于这种情况,我建议你这样做。

于 2013-10-12T09:03:53.170 回答
0
${customer.letterActivated?c}

如果值为 ,则使用isLetterActivated()并显示“真” 。
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”之类的设置。

于 2013-10-12T13:44:17.473 回答