6.SpringMVC中的參數綁定總結

昨天我花了點時間給大家總結了如何整合SSM框架,不知道大家消化了沒有。今天我再來跟大家分享一下SpringMVC中的參數綁定。

1. 參數綁定過程

我們可以回憶一下,在struts2中,是通過在Action中定義一個成員變量來接收前臺傳進來的參數,而在springmvc中,接收頁面提交的數據是通過方法形參來接收的。從客戶端請求的key/value數據,經過參數綁定,將key/value數據綁定到controller方法的形參上,然後就可以在controller中使用該參數了。來看一下這個過程:
在這裏插入圖片描述
所以我們知道,是springmvc提供了很多轉換器來將頁面參數綁定到controller方法的形參上,關於自定義converter,我下面會提到。大概瞭解了該過程後,下面開始做具體的總結。

2. 默認支持的類型

springmvc中,有支持的默認類型的綁定。也就是說,直接在controller方法形參上定義默認類型的對象,就可以使用這些對象。

1. HttpServletRequest對象
2. HttpServletResponse對象
3. HttpSession對象
4. Model/ModelMap對象

在參數綁定過程中,如果遇到上面類型就直接進行綁定。也就是說,我們可以在controller的方法的形參中直接定義上面這些類型的參數,springmvc會自動綁定。這裏要說明一下的就是Model/ModelMap對象,Model是一個接口,ModelMap是一個接口實現 ,作用是將Model數據填充到request域,跟ModelAndView類似,關於它的使用,我在下面和簡單類型參數綁定一起說。

3. 簡單類型的綁定

總結這個還是以需求爲例吧,這樣比較容易理解,假設現在有個需求:根據商品的id來修改對應點商品信息。所以前臺頁面肯定要傳進來該商品的id,然後springmvc的controller進行處理,返回一個修改商品信息的頁面。關於前臺頁面的東西都很簡單,我就不貼代碼了,主要部分截個圖,具體的代碼在文章最後有下載地址。

前臺頁面通過url將參數傳遞過來,請求的是editItems.action。下面寫controller中的editItems方法:
在這裏插入圖片描述
這是個很簡單的demo,從上面的代碼中可以看出model可以直接作爲參數,springmvc默認會綁定它,然後使用model將查詢到的數據放到request域中,這樣就可以在前臺頁面取出該數據了。

要注意一點的是,簡單類型的綁定中,方法形參中的參數名要和前臺傳進來的名一樣才能完成參數的綁定。那有人要問了,如果有特殊需求(比如更好的可讀性?),這裏定義的參數名就是不一樣,那咋整呢?有解決辦法麼?有!我們可以使用註解@RequestParam對簡單的類型進行參數綁定,如下:
在這裏插入圖片描述
所以說,如果不使用@RequestParam,要求request傳入參數名稱和controller方法的形參名稱一致,方可綁定成功。如果使用@RequestParam,不用限制request傳入參數名稱和controller方法的形參名稱一致。通過@RequestParam中的required屬性指定參數是否必須要傳入,如果設置爲true,沒有傳入參數就會報錯。

4. 數組的綁定

數組的綁定指的是前臺傳來多個同一類型的數據,我們在controller中使用數組形參來接收前臺傳來的數據。還是以案例來驅動這部分內容,比如現在我們要批量刪除商品,那麼我們需要勾選好幾個商品,這些商品都有id號,在controller中,我們需要將這些id號全部獲取並放到一個數組中,然後再根據數組中的id號挨個刪除數據庫中對應的項。那麼該如何綁定呢?其實也很簡單,如下:
在這裏插入圖片描述在這裏插入圖片描述

4. List的綁定

通常在需要批量提交數據時,將提交的數據綁定到list中,比如:成績錄入(錄入多門課成績,批量提交),在這裏我們假設有需求:批量商品修改,在頁面輸入多個商品信息,將多個商品信息提交到controller方法中,即一次性更新多個商品信息。 所以思路是在擴展類ItemsQueryVo中新添加一個List,然後將不同商品的信息都存到這個List中,所以修改如下:
在這裏插入圖片描述
所以controller中應該有兩個方法,如下:
在這裏插入圖片描述
關於springmvc的參數綁定基本就總結到這了,其實原理都差不多,只是針對於不同的類型,綁定的方式有些區別而已,多想想多寫寫,基本就能掌握這些了。

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