一尘不染

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

jsp

因此,我们都知道,这#{someBean.value}将尝试获取someBean被称为的某些属性的内容value。它将寻找getValue()。但是,如果此属性是boolean?它将寻找isValue()。它不会寻找的是hasValue()

这让我开始思考,它到底在做什么?

Java EE
5教程章节-
引用统一表达语言PageContext.FindAttribute()PageContext将您送至JSPContext。他们没有一个人真正解释他们遵循的规则来确定他们要寻找的方法的名称。

查找说明方法名称必须以get开头的文档也很容易。但是,我知道这isValue()可行。

谁能指出我的书面记录。我不是在寻找教程或示例,而是在寻找参考。


阅读 377

收藏
2020-06-08

共1个答案

一尘不染

它在JavaBeansSpecEL规范中都有权威记录

以该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);

因此,#{bean.marsupial}完全期望上面的getter / setter对。

在EL规范的第1.18.5章中:

1.18.5将A强制转换为布尔值

  • 如果Anull"",则返回false
  • 否则,如果ABoolean,则返回A
  • 否则,如果AString,并且Boolean.valueOf(A)不引发异常,则将其返回
2020-06-08