因此,我们都知道,这#{someBean.value}将尝试获取someBean被称为的某些属性的内容value。它将寻找getValue()。但是,如果此属性是boolean?它将寻找isValue()。它不会寻找的是hasValue()。
#{someBean.value}
someBean
value
getValue()
boolean
isValue()
hasValue()
这让我开始思考,它到底在做什么?
Java EE 5教程章节-引用统一表达语言PageContext.FindAttribute()。PageContext将您送至JSPContext。他们没有一个人真正解释他们遵循的规则来确定他们要寻找的方法的名称。
PageContext.FindAttribute()
PageContext
JSPContext
查找说明方法名称必须以get开头的文档也很容易。但是,我知道这isValue()可行。
谁能指出我的书面记录。我不是在寻找教程或示例,而是在寻找参考。
它在JavaBeansSpec和EL规范中都有权威记录。
以该boolean属性为例,在JavaBeans规范的8.3.2章中对此进行了描述:
8.3.2布尔属性 此外,对于布尔属性,我们允许使用getter方法来匹配模式: public boolean is<PropertyName>(); 可以提供此“ is < PropertyName >”方法来代替“ get < PropertyName >”方法,或者除了“ get < PropertyName >”方法之外,还可以提供该方法。 在任一情况下,如果“是< 属性名 >”的方法是存在用于一个布尔属性然后,我们将使用“是< 属性名 >”方法来读取的属性值。 布尔属性的示例可能是: public boolean isMarsupial(); public void setMarsupial(boolean m);
此外,对于布尔属性,我们允许使用getter方法来匹配模式:
public boolean is<PropertyName>();
public boolean is<PropertyName>()
可以提供此“ is < PropertyName >”方法来代替“ get < PropertyName >”方法,或者除了“ get < PropertyName >”方法之外,还可以提供该方法。
在任一情况下,如果“是< 属性名 >”的方法是存在用于一个布尔属性然后,我们将使用“是< 属性名 >”方法来读取的属性值。
布尔属性的示例可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);
因此,#{bean.marsupial}完全期望上面的getter / setter对。
#{bean.marsupial}
在EL规范的第1.18.5章中:
1.18.5将A强制转换为布尔值 如果A为null或"",则返回false 否则,如果A为Boolean,则返回A 否则,如果A为String,并且Boolean.valueOf(A)不引发异常,则将其返回
A
null
""
false
Boolean
String
Boolean.valueOf(A)