【问题标题】:How does Java expression language resolve boolean attributes? (in JSF 1.2)Java 表达式语言如何解析布尔属性? (在 JSF 1.2 中)
【发布时间】:2011-03-15 07:05:46
【问题描述】:

所以我们都知道#{someBean.value} 会尝试获取someBean 上称为value 的某个属性的内容。它将寻找getValue()。但是,如果这个属性是boolean 怎么办?它将寻找isValue()。它不会寻找的是hasValue()

这让我思考,它到底是做什么的?

Java EE 5 tutorial chapter - Unified Expression Language 指的是PageContext.FindAttribute()PageContext 将您发送至JSPContext。他们都没有真正解释他们遵循的规则来确定他们正在寻找的方法的名称。

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

谁能指出我写下这些的文档。我不是在寻找教程或示例,而是在寻找参考。

【问题讨论】:

    标签: jsp jsf boolean el


    【解决方案1】:

    它在JavaBeans SpecEL Specification. 中都有权威记录

    boolean属性为例,JavaBeans规范8.3.2章节有描述:

    8.3.2 布尔属性

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

    public boolean is<PropertyName>();

    可以提供这个“isPropertyName>”方法来代替“getPropertyName>”方法, 或者它可以作为“getPropertyName>”方法的补充提供。

    在任何一种情况下,如果布尔属性存在“isPropertyName>”方法,那么我们将 使用“isPropertyName>”方法读取属性值。

    一个示例布尔属性可能是:

        public boolean isMarsupial();
        public void setMarsupial(boolean m);
    

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

    在 EL 规范的第 1.23.5 章中:

    1.23.5 将 A 强制转换为布尔值或布尔值

    • 如果Anull并且目标类型不是原始类型boolean,则返回null
    • 如果Anull"",则返回false
    • 否则,如果ABoolean,则返回A
    • 否则,如果AString,并且Boolean.valueOf(A) 不会抛出 异常,返回它
    • 否则出错

    另见:

    【讨论】:

    • 正是我想要的。谢谢你。我一直认为使用 hasX 对布尔值有效。这是一个相当标准的约定,但我猜 Java(beans) 必须在某处划清界限。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,这肯定有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2021-12-09
    • 2011-08-02
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多