當前位置:
首頁 > 知識 > SpringMVC詳解——參數綁定

SpringMVC詳解——參數綁定


1、SpringMVC 參數綁定

在 SpringMVC 中,提交請求的數據是通過方法形參來接收的。從客戶端請求的 key/value 數據,經過參數綁定,將 key/value 數據綁定到 Controller 的形參上,然後在 Controller 就可以直接使用該形參。

SpringMVC詳解——參數綁定

這裡涉及到參數綁定組件,那麼什麼是參數組件,這裡可以先理解為將請求的數據轉換為我們需要的數據稱為參數綁定組件,也就是參數綁定轉換器。SpringMVC 內置了很多參數轉換器,只有在極少數情況下需要我們自定義參數轉換器。


2、默認支持的類型

SpringMVC 有支持的默認參數類型,我們直接在形參上給出這些默認類型的聲明,就能直接使用了。如下:

①、HttpServletRequest 對象

②、HttpServletResponse 對象

③、HttpSession 對象

④、Model/ModelMap 對象

Controller 代碼:

SpringMVC詳解——參數綁定

表單代碼:(截取主要代碼)

SpringMVC詳解——參數綁定

然後訪問,頁面顯示如下:

SpringMVC詳解——參數綁定

這裡我們重點說一下 Model/ModelMap,ModelMap是Model介面的一個實現類,作用是將Model數據填充到request域,即使使用Model介面,其內部綁定還是由ModelMap來實現

3、基本數據類型的綁定

哪些是基本數據類型,我們這裡重新總結一下:

SpringMVC詳解——參數綁定

我們以 int 類型為例:

JSP 頁面代碼:

SpringMVC詳解——參數綁定

Controller 代碼:

SpringMVC詳解——參數綁定

結果是 列印出了表單裡面的 value 的值。

注意:表單中input的name值和Controller的參數變數名保持一致,就能完成數據綁定。那麼如果不一致呢?我們使用 @RequestParam 註解來完成,如下:

JSP頁面代碼不變,<input name="username">保持原樣,Controller 代碼如下

SpringMVC詳解——參數綁定

使用註解 @RequestParam ,我們可以使用任意形參,但是註解裡面的 value 屬性值要和表單的name屬性值一樣。

問題:我們這裡的參數是基本數據類型,如果從前台頁面傳遞的值為 null 或者 「」的話,那麼會出現數據轉換的異常,就是必須保證表單傳遞過來的數據不能為null或」",所以,在開發過程中,對可能為空的數據,最好將參數數據類型定義成包裝類型,具體參見下面的例子。


4、包裝數據類型的綁定

包裝類型如Integer、Long、Byte、Double、Float、Short,(String 類型在這也是適用的)這裡我們以 Integer 為例

Controller 代碼為:

SpringMVC詳解——參數綁定

和基本數據類型基本一樣,不同之處在於,表單傳遞過來的數據可以為null或」",以上面代碼為例,如果表單中num為」"或者表單中無num這個input,那麼,Controller方法參數中的num值則為null。


5、POJO(實體類)類型的綁定User.java

SpringMVC詳解——參數綁定

SpringMVC詳解——參數綁定

JSP頁面:注意輸入框的 name 屬性值和上面 POJO 實體類的屬性保持一致即可映射成功。

SpringMVC詳解——參數綁定

注意看:這裡面我們數據都寫死了,直接提交。有Integer類型的,String類型的,Date類型的。

Controller :

SpringMVC詳解——參數綁定

我們在上面代碼打個斷點,然後輸入URL,進入到這個Controller中:

SpringMVC詳解——參數綁定

上面是報錯了,User.java 的birthday 屬性是 Date 類型的,而我們輸入的是字元串類型,故綁定不了

那麼問題來了,Date 類型的數據綁定失敗,如何解決這樣的問題呢?這就是我們前面所說的需要自定義Date類型的轉換器。

①、定義由String類型到 Date 類型的轉換器

SpringMVC詳解——參數綁定

②、在 springmvc.xml 文件中配置轉換器

SpringMVC詳解——參數綁定

輸入 URL,再次查看Controller的形參:

SpringMVC詳解——參數綁定


6、複合POJO(實體類)類型的綁定

這裡我們增加一個實體類,ContactInfo.java

SpringMVC詳解——參數綁定

然後在上面的User.java中增加一個屬性 private ContactInfo contactInfo

SpringMVC詳解——參數綁定

JSP 頁面:注意屬性name的命名,User.java 的複合屬性名.欄位名

SpringMVC詳解——參數綁定

Controller

SpringMVC詳解——參數綁定

User對象中有ContactInfo屬性,但是,在表單代碼中,需要使用「屬性名(對象類型的屬性).屬性名」來命名input的name。


7、數組類型的綁定

需求:我們查詢出所有User 的信息,並且在JSP頁面遍歷顯示,這時候點擊提交按鈕,需要在 Controller 中獲得頁面中顯示 User 類的 id 的所有值的數組集合。

JSP 頁面:注意用戶id的name值定義為 userId

SpringMVC詳解——參數綁定

Controller.java

SpringMVC詳解——參數綁定


8、List類型的綁定

需求:批量修改 User 用戶的信息

第一步:創建 UserVo.java,封裝 List<User> 屬性

SpringMVC詳解——參數綁定

第二步:為了簡化過程,我們直接從 Controller 中查詢所有 User 信息,然後在頁面顯示

Controller

SpringMVC詳解——參數綁定

JSP 頁面

SpringMVC詳解——參數綁定

第三步:修改頁面的值後,點擊提交

SpringMVC詳解——參數綁定

由於我們在 JSP 頁面 input 輸入框定義的name屬性名是 userList[${status.index}].id 這種形式的,這裡我們直接用 UserVo 就能獲取頁面批量提交的 User信息


9、Map類型的綁定

首先在 UserVo 裡面增加一個屬性 Map<String,User> userMap

SpringMVC詳解——參數綁定

第二步:JSP頁面,注意看 <input >輸入框 name 的屬性值

SpringMVC詳解——參數綁定

第三步:Controller 中獲取頁面的屬性

SpringMVC詳解——參數綁定

文章摘自博客園


更多優質內容推薦:

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/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

「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 同屏技術詳解