一個頁面:
<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原始碼可以一窺端倪。