SpringMVC數據綁定一(基本數據類型及包裝類型)

以下均是在環境配置好的情況下執行
1.基本數據類型及包裝類型:

根據文本域的name屬性值
jsp表單:

  <form action="name.do" method="post">
  <label>書名:</label><input type="text" id="bookName" name="bookName">
  <label>編號:</label><input type="text" id="bookId" name="bookId">
  <label>分類:</label><input type="text" id="bookCategroy" name="bookCategroy">
  <label>價格:</label><input type="text" id="bookPrice" name="bookPrice">
  <input type="submit" id="subName" value="提交" >
  </form>

controller代碼:

     @RequestMapping(value="name.do")
     @ResponseBody
     public void nameBimds(String bookName,int bookId,String bookCategroy,float bookPrice){
         System.out.println("書名:"+bookName);
         System.out.println("分類:"+bookCategroy);
         System.out.println("編號:"+bookId);
         System.out.println("價格:"+bookPrice);
     }

基本數據類型綁定最基本的方法就是jsp表單中文本標籤屬性name值與後臺Controller中函數名稱一致,即可完成數據綁定。
但是對於int和float類型的數據,如果前臺傳值爲null或”“,則會出現數據轉換異常,前臺瀏覽器提示狀態值400 bad request無效的請求,在SpringMVC中很可能就是類型不匹配。在實際開發中可以使用對應的基本數據類型的包裝類型:Integer(int),Float(float)

     public void nameBimds(String bookName,Integer bookId,String bookCategroy,Float bookPrice){ ......}

自定義變量名(只是在controller中函數參數可以與name值不一致)
前臺不變
Controller

     @RequestMapping(value="name.do")
     @ResponseBody
     public void nameBimds(@RequestParam("bookName")String Name,@RequestParam("bookId")Integer Id,@RequestParam("bookCategroy")String Categroy,@RequestParam("bookPrice")Float Price){
         System.out.println("書名:"+Name);
         System.out.println("分類:"+Categroy);
         System.out.println("編號:"+Id);
         System.out.println("價格:"+Price);
     }

可以發現其實還是指明數據綁定對應規則,即jsp表單值與函數參數值如何一一對應。
大家可以看到在函數前有@ResponseBody,到底什麼作用那?在執行這個函數後會跳到一個空白的頁面而不是原來的頁面(沒有寫跳轉代碼),在ajax代碼中這個問題就會暴露出來了,也會費解,這裏記錄一下(網上找的)
Ajax請求通過XMLHttpRequest對象發送請求,該對象有四個狀態(readyState):
0-未初始化
1-正在初始化
2-發送數據
3-正在發送數據
4-完成
當XMLHttpRequest.readyState爲4時,表示請求已經完成可以得到響應結果。當然success和error方法還是根據響應狀態碼來觸發。當XMLHttpRequest.status爲200的時候,表示響應成功,此時觸發success().其他狀態碼則觸發error().
除了根據響應狀態碼外,ajax還會在下列情況下走error方法:
1. 返回數據類型不是JSON
2. 網絡中斷
3. 後臺響應中斷
js中ajax代碼請求添加提交按鈕onclick函數 jsp去掉form標籤,否則不能識別函數

function subName(){
    $.ajax({
        url:'name.do',
        type:'post',
        data:{
            bookName:$("#bookName").val(),
            bookId:$("#bookId").val(),
            bookCategroy:$("#bookCategroy").val(),
            bookPrice:$("#bookPrice").val()
        },
        success:function(){
            alert("success");
        },
        error:function(){
            alert("error");
        }
    });
}

提交後會發現後臺正確執行,前臺卻執行error函數,挺急人,數據沒有錯,name就是沒有返回正確的狀態碼200,前臺顯示狀態碼400 bad request,這就找到問題所在了,後來查找說是SpringMVC默認是跳轉頁面的,如果沒有指定跳轉頁面,那麼就必須標記@ResponseBody,從而可以返回前臺200狀態碼。
這裏在介紹一下@ResponseBody和@RequestBody
@RequestBody
作用:
i) 該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然後把相應的數據綁定到要返回的對象上;
ii) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。
@ResponseBody
作用:
該註解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區。
使用時機:
返回的數據不是html標籤的頁面,而是其他某種格式的數據時(如json、xml等)使用;
結合上面知識在前臺瀏覽器資源中可以看到200的response 裏面有綁定的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章