タイトルのとおり、ELで${aName}と書いても、BeanのgetAName()は呼び出せない。
これ知ってるんだけど、なんで?けっこう長いこと疑問。何の仕様なんだろ。
Java Beansの仕様でこうなってるのかなあ。
(追記)
ひがさんとkoichikさんに教えていただきました!JavaBeansの仕様でした!
we normally convert the first character to lower case. However to support the occasional use of all upper-case names, we check if the first two characters of the name are both upper case and if so leave it alone.
Java SE Desktop Technologies - Java Beans
他にもたとえば、Seasar2のBeanDescImplクラスで、getterから「get」を取り除いた文字列を引数にして、プロパティ名に変換するメソッドがある。
要は、「FirstName」->「firstName」にするメソッド。
private static String decapitalizePropertyName(String name) { if (StringUtil.isEmpty(name)) { 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); }
0番目の文字と1番目の文字が大文字だったら、変換せず引数をそのまま戻してる。
つまり、「AName」だったらaNameにはせず、「AName」のまま戻すってこと。
やっぱりどこかの仕様であるから、きちんとこうしてくれてる。
検索してもうまく見つからない。どこに書いてあるんだろう。。。