checkbox的name與JavaBean的互動時發現的一個現象

王明輝發表於2017-09-18

 一個頁面:

<form action="reg.jsp" method="post">            
<ul>
<li>演算法選擇</li>
<li><input type="checkbox" name="algorithms" value="plus">加法 
<input type="checkbox" name="algorithms" value="minus">減法
<input type="checkbox" name="algorithms" value="multi">乘法
         <input type="checkbox" name="algorithms" value="divide">除法
</li>
</ul>
</form>


提交到另一個頁面,程式碼如下:

<body>
    <jsp:useBean id="convertor" class="sabreTest.Convertor"></jsp:useBean>
    <jsp:useBean id="al" class="Algorithm.AlgorithmConfiguration"></jsp:useBean>
    
    <jsp:setProperty property="*" name="al"/>

    選擇的演算法:<%=convertor.convert(al.getAlgorithms())%>

</body>
package Algorithm;

public class AlgorithmConfiguration {

    private String[] algorithms;

    public String[] getAlgorithms() {
        return algorithms;
    }

    public void setAlgorithms(String[] algorithms) {
        this.algorithms = algorithms;
    }
}

 

發現的現象:第一段程式碼中,如果checkbox的name是Algorithms,也就是首字母大寫,並且第三段程式碼也改成Algorithms,重新編譯釋出,就無法被第二個頁面獲取和輸出,只有小寫時才可以。

下面進行其它方面的測試:

第一次測試,即發現的現象,屬性的首字母大寫時,即Algorithms,方法名為getAlgorithms,提交後頁面無法獲取,均為小寫字母時,即屬性名為algorithms,方法名為getAlgorithms,可以獲取字串值。

第二次測試,屬性名改為algorithmS,頁面上的checkbox的name隨之更改,提交後可以獲取字串值。

第三次測試,屬性名改為AlgorithmS,頁面上的checkbox的name隨之更改,提交後獲取不到字串值。

第四次測試,屬性名改為aLGORITHMS,頁面上的checkbox的name隨之更改,提交後可以獲取字串值。與此同時,發現屬性名改為aLGORITHMS時,Eclipse環境下,屬性上右鍵,自動生成Getter和Setter時,get後面的字母沒有自動變為大寫,即,此時的get方法是getaLGORITHMS()這樣的,而前面的都會把首字母自動變為大寫。

第五次測試,手動把第四次測試中的getaLGORITHMS()的方法改為getALGORITHMS()後,獲取不到字串值。

第六次測試,屬性名改為Algorithms,同時方法名改為getalgorithms,提交後獲取不到字串值。

第七次測試,屬性名改為algorithms,同時方法名改為getalgorithms,提交後可以獲取字串值。

第八次測試,屬性名改為ALGORITHMS,同時方法名改為getALGORITHMS,提交後可以獲取字串值。

 

這是什麼規律?目前我沒看出來。

似乎,屬性的首字母小寫,都可以獲取值。如果首字母大寫,那麼必須要全部大寫,才能獲取值。

以前看過一些習慣於用java的朋友寫的程式碼,特別喜歡用全程小寫,不知道是不是與這個現象有關。而我習慣於駝峰命名法。

這是為什麼?也許Java原始碼可以一窺端倪。

 

相關文章