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规范的理解getXAxis
是xAxis
属性的正确访问器。 Lombok同意我的观点,它也会生成getXAxis
方法。但是,Eclipse中的“Getter和Setter”生成器在生成getxAxis
时不同意。
更新
我同时发现了一些事情:
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”
“网址”变为“网址”
但是“如果名称的前两个字符都是大写”,则此处不适用。
我错过了什么?
答案 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