所以我们都知道#{someBean.value}
会尝试获取名为someBean
的{{1}}上某些属性的内容。它会寻找value
。但是,如果此属性为getValue()
怎么办?它会寻找boolean
。它不会寻找的是isValue()
。
这让我思考,究竟是做什么的?
Java EE 5 tutorial chapter - Unified Expression Language指的是hasValue()
。 PageContext.FindAttribute()
会将您转到PageContext
。他们都没有真正解释他们遵循的规则来确定他们正在寻找的方法的名称。
找到说文件名必须以get开头的文档也相当容易。但是,我知道JSPContext
有效。
任何人都可以向我指出记录下来的文档。我不是在寻找我正在寻找参考的教程或示例。
答案 0 :(得分:17)
它在JavaBeans Spec和EL Specification.
中得到了权威记录以boolean
属性为例,它在JavaBeans规范的第8.3.2章中描述:
8.3.2布尔属性
此外,对于布尔属性,我们允许getter方法匹配模式:
public boolean is<PropertyName>()
;可以提供此“&lt; PropertyName &gt;”方法,而不是“get&lt; PropertyName &gt;”方法, 或者除了“get&lt; PropertyName &gt;”方法之外,还可以提供它。
在任何一种情况下,如果布尔属性存在“is&lt; PropertyName &gt;”方法,那么我们将 使用“is&lt; PropertyName &gt;”方法来读取属性值。
示例布尔属性可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);
因此,#{bean.marsupial}
完全符合上述getter / setter对。
在EL规范的第1.18.5节中:
1.18.5将A强制转换为布尔值
- 如果
A
为null
或""
,请返回false
- 否则,如果
A
是Boolean
,请返回A
- 否则,如果
A
是String
,Boolean.valueOf(A)
不会抛出 例外,退货
答案 1 :(得分:5)
基本上你所说的就是它的全部内容。 EL期望该对象遵循常规的Java bean标准。这两个应该有所帮助: