Java表达式语言如何解析布尔属性?(在JSF 1.2中)

Jas*_*oor 13 jsf jsp boolean el

所以我们都知道#{someBean.value}会尝试获取someBean被调用的某些属性的内容value.它会寻找getValue().但是,如果这个属性是boolean什么?它会寻找isValue().它不会寻找的是hasValue().

这让我思考,究竟是做什么的?

Java EE 5教程章节 - 统一表达式语言是指PageContext.FindAttribute().PageContext送你去JSPContext.他们都没有真正解释他们遵循的规则来确定他们正在寻找的方法的名称.

找到说方法名称必须以get开头的文档也相当容易.但是,我知道这很isValue()有效.

任何人都可以指向我写下来的文档.我不是在寻找我正在寻找参考的教程或示例.

Bal*_*usC 17

它在JavaBeans规范EL规范中得到了权威性的记录.

以该boolean属性为例,它在JavaBeans规范的第8.3.2节中描述:

8.3.2布尔属性

另外,对于布尔属性,我们允许getter方法匹配模式:

public boolean is<PropertyName>();

可以提供此"is < PropertyName >"方法而不是"get < PropertyName >"方法,或者除了"get < PropertyName >"方法之外还可以提供它.

在任何一种情况下,如果布尔属性存在"is < PropertyName >"方法,那么我们将使用"is < PropertyName >"方法来读取属性值.

布尔属性的示例可能是:

    public boolean isMarsupial();
    public void setMarsupial(boolean m);
Run Code Online (Sandbox Code Playgroud)

因此,#{bean.marsupial}完全符合上述getter/setter对.

在EL规范的第1.18.5章中:

1.18.5将A强制转换为布尔值

  • 如果A是,null""返回false
  • 否则,如果ABoolean,则返回A
  • 否则,如果A是a String,并且Boolean.valueOf(A)不抛出异常,则返回它

也可以看看:


Jav*_*ker 5

基本上你所说的就是它的全部内容.EL期望该对象遵循常规的Java bean标准.这两个应该有所帮助: