转自:http://blog.sina.com.cn/s/blog_65b6eaa30100pm81.html
我在学习struts的时候遇到了一些问题.可笑的是:所遇到的问题并不是struts技术本身,而是来自el表达式的一些挑战.其中最令人困惑的是EL的大小写问题.
可以肯定的一点是:即便在类中没有定义属性,只要有getter方法,el表达式就起作用.
但问题是如果用EL表达式, 类中的属性也许没有定义,这时使用${class.propertyName}输出结果.这里的带有下划线的P该大写还是小写呢?
以下是实例:
private String name="xlx";
public String getName(){
return name;
}
public String getPassword(){
return "password";
}
public String getABook(){
return "Thinking in Java";
}
public String getABC(){
return "ABC";
}
${requestScope.page.name}
${requestScope.page.password}
${requestScope.page.ABook}--------小写a并不能正确显示
${requestScope.page.ABC}
第二和第三个都没有定义属性,只有getter方法.二是可以和有属性的一name一样输出的,但三不可以.当三的ABook首字母大写时.显示正确.由此可见,单个单词可以像有属性的字段一样输出,当getter方法出现两个紧紧相连的大写字母时,首字母要大写.但如果出现两个或两个以上大写字母而他们并不相连呢?以下是实例:
public String getUserAddress(){
return "user address";
}
${requestScope.page.userAddress}
居然可以和有属性的一样使用!
private String aBCD="a--B--C";
public String getABCD(){
return aBCD;
}
${requestScope.page.aBCD}
上述表达式不能显示.当把ABCD时可以正确显示. 由此可见,属性的有无与EL是没有关系的,EL只关系类中是否有getter方法,当有相连的两个大写字母时,EL的输出应该采取和getter方法get后一致的大小写规则.
总之,在经过实践后,EL表达式需要注意的使用只有一条:当get方法后的字符如果前两个都是大写时,EL表达式需要大写.除此之外均为小写.