Java Freemarker布尔属性检索

Java Freemarker布尔属性检索,java,jakarta-ee,freemarker,Java,Jakarta Ee,Freemarker,我有一个Customer对象,它有一个布尔属性。根据标准java实践,getter方法如下所示 public Boolean isLetterActivated() { return letterActivated; } 但似乎Freemaker没有选择customer.letterActivated的表达式,我想这可能是我没有getLetterActivated方法的原因。(请注意,customer对象的其他表达式工作正常,它们都有get***方法) 我应该如何从FTL引用这个布尔变

我有一个Customer对象,它有一个布尔属性。根据标准java实践,getter方法如下所示

public Boolean isLetterActivated() {
    return letterActivated;
}
但似乎Freemaker没有选择customer.letterActivated的表达式,我想这可能是我没有getLetterActivated方法的原因。(请注意,customer对象的其他表达式工作正常,它们都有get***方法)


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

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

布尔getter也可以是name
getXXX
。。正如你所说的,还有其他参考文献引用了现有的方法
isleteractivated
。我建议你这样做,因为其他的参考资料都超出了你的范围

public boolean getLetterActivated() {
    return this.isLetterActivated();
}
这样你就不会弄乱现有的代码,新的代码可以使用新的方法。。。但我认为这是一个糟糕的设计。但考虑到目前的情况,我建议你还是这样做

${customer.letterActivated?c}
使用胰岛激活()和
如果值为
true
,则显示“true”。

以下代码对我来说也可以正常工作(在freemarker 2.3.20中测试)


伟大的信被激活了${customer.letterActivated?c}人
()!false
部分仅用于处理
null

来自freemarker编译器的更多信息:

Freemarker编译器输出 无法自动将布尔值转换为字符串,因为“布尔值格式”设置为“true,false”,这是传统的默认计算机语言格式,因此不被接受

提示:如果在生成计算机语言输出时只需要“true”/“false”结果,请使用“?”c”,如${myBool?c}

提示:您可以编写myBool?字符串('yes','no'),并指定布尔格式

提示:如果您在大多数地方需要相同的两个值,程序员应该将“boolean_format”设置为类似“yes,no”的值


如果您使用的是eclipse之类的IDE,那么可以将该方法重构为
getXXX
,这将更改该方法调用的所有实例。布尔getter可以用后缀命名为
is
以及
get
:)我知道IDE将使用引用进行重构,但它位于一个客户端jar中,我不应该接触它。在您的客户类中,您是否只有isLetterActivated作为letterActivated布尔属性的getter?或者,你是否也激活了GetLetter?我试过customer.letterActivated?c,但不起作用…似乎customer.letterActivated?c只适用于Freemarker 2.3.20及更高版本。旧版本可以使用customer.letterActivated?字符串('yes','no')。不,我没有getLetterActivated()方法。letterActivated字段也不是必需的,或者可以是私有的。但未在旧版本中测试。
<#if (customer.letterActivated)!false>
 Great letter is activated! ${customer.letterActivated?c} man
<#/if>