javax.el.PropertyNotFoundException,为什么xAx与getXAxis不匹配

时间:2015-04-21 19:08:01

标签: jsp java-ee tomcat7 el

Tomcat 7中的EL 2.2抛出

javax.el.PropertyNotFoundException: Property 'xAxis' not found on type ...

当我尝试访问以下属性时

private XAxis xAxis;

public XAxis getXAxis() {
  return xAxis;
}

喜欢这样

${bean.xAxis}

在JSP中。

我对JavaBeans和EL规范的理解getXAxisxAxis属性的正确访问器。 Lombok同意我的观点,它也会生成getXAxis方法。但是,Eclipse中的“Getter和Setter”生成器在生成getxAxis时不同意。

更新

我同时发现了一些事情:

仍然,我无法理解Java Beans规范的第8.8章如何适用于此,因为它描述了不同的情况。对我来说,这看起来更像java.beans.Introspector#decapitalize的实现细节,而不是明确定义的行为。

public static String decapitalize(String name) {
    if (name == null || name.length() == 0) {
        return name;
    }
    if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                    Character.isUpperCase(name.charAt(0))){
        return name;
    }
    char chars[] = name.toCharArray();
    chars[0] = Character.toLowerCase(chars[0]);
    return new String(chars);
}

规范说

  

因此,当我们从中间提取属性或事件名称时   现有的Java名称,我们通常将第一个字符转换为较低的   案件。但是,为了支持偶尔使用所有大写名称,   我们检查名称的前两个字符是否都是大写   如果是这样的话,请不要管它。例如,

     

“FooBah”变成“fooBah”

     

“Z”变为“z”

     

“网址”变为“网址”

但是“如果名称的前两个字符都是大写”,则此处不适用。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

  

规范说

     
    

因此,当我们从现有Java名称的中间提取属性或事件名称时,我们通常会将第一个字符转换为     小写。但是要支持偶尔使用所有大写字母     名称,我们检查名称的前两个字符是否都是上限     如果是这样的话,请不要管它。例如,

         

“FooBah”变成“fooBah”

         

“Z”变为“z”

         

“网址”变为“网址”

  
     

但是"如果名字的前两个字符都是大写字母"   不适用于此。

     

我错过了什么?

" 现有Java名称"你的方法是" getXAxis",或者它可能是" isXAxis"对于布尔属性。

现有Java名称的<#34; 中间&#34;是&#34; XAxis&#34;。 &#34;前两个字符&#34;那是&#34; XA&#34;,所以保留原样,没有资本化。

有一种方法可以使用显式BeanInfo将方法名称显式映射到属性名称,但很少使用它。

顺便说一下,JavaBeans 1.01规范的日期是1997年8月。它已经使用了18年。下载页面: http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html