關於request.getParameter(java.lang.String name)

//前段時間比較忙,很久不寫日誌了。總結個基礎的問題,在Grails中寫java代碼果真會遭報應,出錯了常常沒提示...

問題重現:爲了便於處理分頁,在前端頁面添加了一個參數,定義以下: javascript

<input id="pagination" type="hidden" value="0" />

【1】Append數據後,自動更改分頁參數: html

$('#pagination').val($('#pagination').val() + 10);

經過Ajax傳參給後端,進行處理,參數定義以下: 前端

"pagination" : (typeof ($('#pagination')) == "undefined") ? 0:$('#pagination').val(),

【2】Controller中如此處理此參數: java

Intege pagination =  request.getParameter("pagination");// input: 0

經驗證,上述代碼均有問題... apache

【1】這段的思路是頁面每次追加新數據後,自動增長分頁參數的值...但是javascript會把這個$('#pagination').val()當成字符串去加...因而第二頁可能出現這樣的結果: 後端

 

  010

...好吧,前端陷阱就是很多...以下解決方案: api

$('#pagination').val(parseInt($('#pagination').val()) + 10);
$('#pagination').val(Number($('#pagination').val()) + 10);

【2】由於servlet裏處理頁碼的方法的參數是整形,因此這裏直接用Integer接收了。 tomcat

 

print("pagination:" + pagination);// pagination:48

 直接輸出ASCII值 ...不是我想要的...用一個"-48"? 超出0-9後就會報錯的... oracle

找緣由... 測試

http://download.oracle.com/otn-pub/jcp/servlet-3_1-fr-spec/servlet-3_1-final.pdf

http://tomcat.apache.org/tomcat-7.0-doc/servletapi/

參見Servlet規範及Tomcat的實現,原來這個request.getParameter()方法返回的是String!

至於爲嘛返回48?試試...

    System.out.println((int) '1');//49
    System.out.println((int) '11');//Invalid character constant
    System.out.println((Integer) "1");//Cannot cast from String to Integer
    System.out.println((Integer) "11");//Cannot cast from String to Integer

按理說這個"1"應該報錯啊,不該該顯示49...參考Tomcat 實現理應是個String的"1"吧,應該編譯就有問題啊?沒看到哪裏轉換爲'1'...此處有個疑問...

public String getParameter(String name ) {
        handleQueryParameters();
        ArrayList<String> values = paramHashValues.get(name);
        if (values != null) {
            if(values.size() == 0) {
                return "";
            }
            return values.get(0);
        } else {
            return null;
        }
    }

 

 ____________分割線_  20131121補充_____________________

今天想起那是個Groovy的Controller,測試下,終於明白爲嘛1變變成49了,跟容器無關。

groovy>  class HelloWorld  
groovy>  {  
groovy>      static void main(String[] args) {  
groovy>      int a = 'a'; 
groovy>      int b ='1'; 
groovy>      int c = "1"; 
groovy>      println a; 
groovy>      println b; 
groovy>      println c; 
groovy>      } 
groovy>   } 
 
97
49
49
相關文章
相關標籤/搜索