zoukankan      html  css  js  c++  java
  • java中属性命名get字母大小写问题

    java文件

    company.java

    private int sTime; 

    public void setSTime (int sTime) {
            this.sTime = sTime;
        }
        
        public int getSTime() {
            return sTime;
        }

    jsp文件

    list.jsp

    ${company.sTime}

    报错

    Property 'sTime' not found on type com.entity.Company

     

    1、背景 

    本文讲的普通JavaBean只是一个拥有Property(域/类变量)及其setter/getter的普通Java类。 
    有一定Java开发经验的人可能会知道,普通JavaBean的Property(域/类变量)的命名不能采用以下形式:aA***或者Aa***,如:"aDdress"或"Address",否则,在web应用中会报无法找到这个Property(因为根据"规则",需要找的是"ADdress"或"address")。但对于其中的原因,一般人都不明白,难道这是Sun公司当初定的规范吗? 
    Java开源以后,我们终于可以解开其中的谜: 

    2、普通JavaBean处理涉及到相关类 
    在web应用中,Servlet容器或者EJB容器一般会使用java.beans包中的类来加载这些JavaBean。 
    BeanInfo(接口) 
       | 
    SimpleInfo(类) 
       | 
    GenericBeanInfo(类) 
    GenericBeanInfo是JavaBean数据装载类。 
    Introspector是JavaBean处理中最重要的一个处理类。 
    另外的一些辅助类,就不一一列举了。 

    3、解密 
    3.1 开始 
    在应用中,我们通常会用以下代码来获取一个普通JavaBean相关的信息: 
    BeanInfo mBeanInfo = null; 
    try { 
    mBeanInfo = Introspector.getBeanInfo(Person.class); 
    } catch (IntrospectionException e) { 
    e.printStackTrace(); 

    3.2 深入 
    在Introspector类的getBeanInfo方法中,我们发现其中与Property处理相关的行: 
    private GenericBeanInfo getBeanInfo() 
            throws IntrospectionException { 
            …… 
            PropertyDescriptor apropertydescriptor[] = getTargetPropertyInfo(); 
            …… 
        } 
    3.3 继续深入 
    在Property处理方法中,我们发现其处理方式是根据getter/setter的方法来得到Property(域/类变量) 
    private PropertyDescriptor[] getTargetPropertyInfo() throws IntrospectionException{ 
       …… 
    if(s.startsWith("get")) obj = new PropertyDescriptor(decapitalize(s.substring(3)), method, null); 
    …… 

    3.4 关键 
    接下来,最关键的就是下面这个方法: 
    public static String decapitalize(String s) 
        { 
            if(s == null || s.length() == 0) 
                //空处理 
                return s; 
            if(s.length() > 1 && Character.isUpperCase(s.charAt(1)) && Character.isUpperCase(s.charAt(0))){ 
                //长度大于1,并且前两个字符大写时,返回原字符串 
                return s; 
            } else{ 
                //其他情况下,把原字符串的首个字符小写处理后返回 
                char ac[] = s.toCharArray(); 
                ac[0] = Character.toLowerCase(ac[0]); 
                return new String(ac); 
            } 

        }

  • 相关阅读:
    计算机考研真题 浮点数加法
    计算机考研复试真题 整数奇偶排序
    计算机考研复试 A+B
    计算机考研复试真题 整数拆分
    计算机考研复试真题 众数
    1121 Damn Single (25 分)
    1112 Stucked Keyboard (20 分)
    1117 Eddington Number (25 分)
    1005 继续(3n+1)猜想 (25 分)
    1047 编程团体赛 (20 分)
  • 原文地址:https://www.cnblogs.com/Nicolasap/p/7698977.html
Copyright © 2011-2022 走看看