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); 
        } 

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM