SpringMVC詳解——參數綁定
1、SpringMVC 參數綁定
在 SpringMVC 中,提交請求的數據是通過方法形參來接收的。從客戶端請求的 key/value 數據,經過參數綁定,將 key/value 數據綁定到 Controller 的形參上,然後在 Controller 就可以直接使用該形參。
這裡涉及到參數綁定組件,那麼什麼是參數組件,這裡可以先理解為將請求的數據轉換為我們需要的數據稱為參數綁定組件,也就是參數綁定轉換器。SpringMVC 內置了很多參數轉換器,只有在極少數情況下需要我們自定義參數轉換器。
2、默認支持的類型
SpringMVC 有支持的默認參數類型,我們直接在形參上給出這些默認類型的聲明,就能直接使用了。如下:
①、HttpServletRequest 對象
②、HttpServletResponse 對象
③、HttpSession 對象
④、Model/ModelMap 對象
Controller 代碼:
表單代碼:(截取主要代碼)
然後訪問,頁面顯示如下:
這裡我們重點說一下 Model/ModelMap,ModelMap是Model介面的一個實現類,作用是將Model數據填充到request域,即使使用Model介面,其內部綁定還是由ModelMap來實現
3、基本數據類型的綁定
哪些是基本數據類型,我們這裡重新總結一下:
我們以 int 類型為例:
JSP 頁面代碼:
Controller 代碼:
結果是 列印出了表單裡面的 value 的值。
注意:表單中input的name值和Controller的參數變數名保持一致,就能完成數據綁定。那麼如果不一致呢?我們使用 @RequestParam 註解來完成,如下:
JSP頁面代碼不變,<input name="username">保持原樣,Controller 代碼如下
使用註解 @RequestParam ,我們可以使用任意形參,但是註解裡面的 value 屬性值要和表單的name屬性值一樣。
問題:我們這裡的參數是基本數據類型,如果從前台頁面傳遞的值為 null 或者 「」的話,那麼會出現數據轉換的異常,就是必須保證表單傳遞過來的數據不能為null或」",所以,在開發過程中,對可能為空的數據,最好將參數數據類型定義成包裝類型,具體參見下面的例子。
4、包裝數據類型的綁定
包裝類型如Integer、Long、Byte、Double、Float、Short,(String 類型在這也是適用的)這裡我們以 Integer 為例
Controller 代碼為:
和基本數據類型基本一樣,不同之處在於,表單傳遞過來的數據可以為null或」",以上面代碼為例,如果表單中num為」"或者表單中無num這個input,那麼,Controller方法參數中的num值則為null。
5、POJO(實體類)類型的綁定User.java
JSP頁面:注意輸入框的 name 屬性值和上面 POJO 實體類的屬性保持一致即可映射成功。
注意看:這裡面我們數據都寫死了,直接提交。有Integer類型的,String類型的,Date類型的。
Controller :
我們在上面代碼打個斷點,然後輸入URL,進入到這個Controller中:
上面是報錯了,User.java 的birthday 屬性是 Date 類型的,而我們輸入的是字元串類型,故綁定不了
那麼問題來了,Date 類型的數據綁定失敗,如何解決這樣的問題呢?這就是我們前面所說的需要自定義Date類型的轉換器。
①、定義由String類型到 Date 類型的轉換器
②、在 springmvc.xml 文件中配置轉換器
輸入 URL,再次查看Controller的形參:
6、複合POJO(實體類)類型的綁定
這裡我們增加一個實體類,ContactInfo.java
然後在上面的User.java中增加一個屬性 private ContactInfo contactInfo
JSP 頁面:注意屬性name的命名,User.java 的複合屬性名.欄位名
Controller
User對象中有ContactInfo屬性,但是,在表單代碼中,需要使用「屬性名(對象類型的屬性).屬性名」來命名input的name。
7、數組類型的綁定
需求:我們查詢出所有User 的信息,並且在JSP頁面遍歷顯示,這時候點擊提交按鈕,需要在 Controller 中獲得頁面中顯示 User 類的 id 的所有值的數組集合。
JSP 頁面:注意用戶id的name值定義為 userId
Controller.java
8、List類型的綁定
需求:批量修改 User 用戶的信息
第一步:創建 UserVo.java,封裝 List<User> 屬性
第二步:為了簡化過程,我們直接從 Controller 中查詢所有 User 信息,然後在頁面顯示
Controller
JSP 頁面
第三步:修改頁面的值後,點擊提交
由於我們在 JSP 頁面 input 輸入框定義的name屬性名是 userList[${status.index}].id 這種形式的,這裡我們直接用 UserVo 就能獲取頁面批量提交的 User信息
9、Map類型的綁定
首先在 UserVo 裡面增加一個屬性 Map<String,User> userMap
第二步:JSP頁面,注意看 <input >輸入框 name 的屬性值
第三步:Controller 中獲取頁面的屬性
文章摘自博客園
更多優質內容推薦:
2017優就業就業促進計劃:
http://www.ujiuye.com/zt/jycj/?wt.bd=lsh11tt
學IT,用周末給自己加薪!
http://www.ujiuye.com/zt/zmb/?wt.bd=lsh11tt
IT職業教育:http://xue.ujiuye.com/


※「js高手之路」從原型鏈開始圖解繼承到組合繼承的產生
※淺談 css 之 position用法
※什麼是MySQL的事務
TAG:IT優就業 |
※SpringMVC常用註解標籤詳解
※SpringMVC + security模塊 框架整合詳解
※OpenCV VideoCapture.get()參數詳解
※Spring MVC之DispatcherServlet初始化詳解
※Spring Cloud限流詳解
※詳解TogetherJS
※MySQL Explain詳解
※Lightroom Classic CC v7.3更新詳解
※FPGA與ASIC的完美結合,Achronix Speedster 7t系列詳解
※HashMap詳解
※Struts2框架獲取Servlet API之注入方式詳解
※MyBatis 配置 typeHandlers 詳解
※Canvas API詳解(Part 1)
※VulnHub中LazySysAdmin 題目詳解
※高能細節詳解!TAKAHIROMIYASHITA TheSoloist x Converse聯名系列!
※蘋果MacBook Air/Mac Mini/iPad Pro新品詳解
※Classical CNN models:LeNet-5 模型結構詳解
※CPU各項參數詳解;AMD和Intel該怎麼選?
※使用Wireshark詳解TCP協議
※iOS Airplay Screen Mirroring 同屏技術詳解