所以我们都知道#{someBean.value}
将尝试获取某些属性的内容someBean
called value
。它会寻找getValue()
。但是,如果这个属性是boolean
?它会寻找isValue()
。它不会寻找的是hasValue()
.
这让我思考,它到底有什么作用?
Java EE 5 教程章节 - 统一表达式语言 http://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html指的是PageContext.FindAttribute()
. PageContext
将您发送至JSPContext
。他们都没有真正解释他们所遵循的规则来确定他们正在寻找的方法的名称。
也很容易找到说明方法名称必须以 get 开头的文档。然而,我知道isValue()
works.
任何人都可以向我指出记录此内容的文档。我不是在寻找教程或示例,而是在寻找参考。
它在两个文件中都有权威记录JavaBeans 规范 https://download.oracle.com/otn-pub/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/beans.101.pdf and EL 规格。 https://download.oracle.com/otn-pub/jcp/el-3_0-fr-spec/EL3.0.FR.pdf
采取boolean
以 property 为例,JavaBeans 规范第 8.3.2 章对此进行了描述:
8.3.2 布尔属性
此外,对于布尔属性,我们允许 getter 方法来匹配模式:
public boolean is<PropertyName>()
;
这个“是属性名称可以提供“>”方法来代替“get属性名称>”方法,
或者除了“get属性名称>”方法。
无论哪种情况,如果“是属性名称>” 方法存在于布尔属性中,那么我们将
使用“是属性名称>”方法读取属性值。
布尔属性的示例可能是:
public boolean isMarsupial();
public void setMarsupial(boolean m);
So, #{bean.marsupial}
期望与上面的 getter/setter 对完全相同。
在 EL 规范的第 1.23.5 章中:
1.23.5 将 A 强制转换为 Boolean 或 boolean
- If
A
is null
并且目标类型不是原始类型boolean
, 返回null
- If
A
is null
or ""
, 返回false
- 否则,如果
A
is a Boolean
, 返回A
- 否则,如果
A
is a String
, and Boolean.valueOf(A)
不抛出
异常,返回
- 否则会报错
也可以看看:
- javax.el.PropertyNotFoundException:属性“foo”在类型 java.lang.Boolean 上不可读 https://stackoverflow.com/questions/13952630/javax-el-propertynotfoundexception-property-foo-not-readable-on-type-java-lan
- Java:如何命名布尔属性 https://stackoverflow.com/questions/2945061/java-how-to-name-boolean-properties/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)