commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maliwei <>
Subject Is it a bug or mechanism changing of OGNL, could't set and get a bean's property, that the name of the property's sencond character is upper-case?
Date Fri, 02 Nov 2012 05:08:27 GMT
As I have desc in the mail title, and see the code below:

/**--------------code start----------**/
import ognl.Ognl;
import ognl.OgnlException;
class Hello {
    private String pName;
    public String getpName() {
        return pName;
    public void setpName(String pName) {
        this.pName = pName;

public class OgnlTest {
    public static void main(String[] args) {
        Hello action = new Hello();
        try {
            Object pName = Ognl.getValue("pName", action);
        } catch (OgnlException e) {
            //this will happen when use version 2.7+ and 3.x
/**--------------code end----------**/

According to JavaBeans Spec sec 8.8 "Capitalization of inferred names":
Thus when we extract a property or event name from the middle of an existing Java name, 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. So for example,
“FooBah” becomes “fooBah”
“Z” becomes “z”
“URL” becomes “URL”
We provide a method Introspector.decapitalize which implements this conversion rule.
String java.beans.Introspector.decapitalize(String name)
Utility method to take a string and convert it to normal Java variable name capitalization.
This normally means converting the first character from upper case to lower case, but in the
(unusual) special case when there is more than one character and both the first and second
characters are upper case, we leave it alone. 
Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays as "URL".

Best Regards
Ma Liwei
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message