commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maliwei <mlw5...@gmail.com>
Subject Re: Re: 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 06:33:01 GMT
No, according to spec : if the getter name is "getPName", we can reverse inference  that the
property name should be "PName".

ps: I also think the rule of spec is a bit of strange, but if spec not , we'll got a conflict
on when property name between "URL" and "uRL".


From: Dave Newton
Date: 2012-11-02 13:58
To: Commons Users List; mlw5415
Subject: Re: 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?
Shouldn't the getter be named "getPName"?
Dave
(pardon brevity, typos, and top-quoting; on cell)
On Nov 2, 2012 1:09 AM, "Maliwei" <mlw5415@gmail.com> wrote:

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();
        action.setpName("pName.Foo");
        try {
            Object pName = Ognl.getValue("pName", action);
            System.out.println(pName);
        } catch (OgnlException e) {
            //this will happen when use version 2.7+ and 3.x
            e.printStackTrace();
        }
    }
}
/**--------------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
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message