John Pace created FREEMARKER-234:
------------------------------------
Summary: BeansWrapper does not expose Boolean "is" getters as
properties
Key: FREEMARKER-234
URL: https://issues.apache.org/jira/browse/FREEMARKER-234
Project: Apache Freemarker
Issue Type: Bug
Affects Versions: 2.3.34
Environment: OpenJDK 17, Windows 10
Reporter: John Pace
According to the official
[documentation|https://freemarker.apache.org/docs/pgui_misc_beanwrapper.html#beanswrapper_hash]:
{quote}Every object will be wrapped into a TemplateHashModel that will expose
JavaBeans properties and methods of the object. This way, you can use model.foo
in the template to invoke obj.getFoo() or obj.isFoo() methods.
{quote}
However, this does not hold true for getters returning java.lang.Boolean.
{code:java}
public class MyObject {
private Boolean obsolete = Boolean.TRUE;
public Boolean isObsolete() {
return obsolete;
}
}{code}
{code:java}
<!-- Works -->
<#if myobject.isObsolete()>obsolete</#if>
<!-- Does NOT work -->
<#if myobject.obsolete>obsolete</#if> {code}
{code:java}
19:55:46,241 ERROR f.runtime - Error executing FreeMarker template
freemarker.core.InvalidReferenceException: The following has evaluated to null
or missing:
==> myobject.obsolete [in template "templates/test.ftlh" at line 5, column 12]
----
Tip: It's the step after the last dot that caused this error, not those before
it.
----
Tip: If the failing expression is known to legally refer to something that's
sometimes null or missing, either specify a default value like
myOptionalVar!myDefault, or use <#if
myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the
last step of the expression; to cover the whole expression, use parenthesis:
(myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)