spring mvc 如何传递集合参数(list,数组)
spring mvc 可以自動的幫你封裝參數(shù)成為對象,不用自己手動的通過request一個一個的獲取參數(shù),但是這樣自動的參數(shù)封裝碰碰到了集合參數(shù)可能就需要點小技巧才可以了。
一、基礎(chǔ)類型和引用類型有什么區(qū)別?
基礎(chǔ)類型是直接保存在堆棧上面的,引用類型(對象)值保存在堆上面,地址保存在棧上面的,基礎(chǔ)類型都有非null的默認(rèn)值,比如int默認(rèn)是0,boolean默認(rèn)是false,引用類型除非是用new開辟出新的空間,否則只有地址信息沒有值信息。int 和 integer的區(qū)別不僅是有沒有默認(rèn)值的問題,Integer還有自己的成員變量,雖然都是靜態(tài)的,比如Integer.MAX_VALUE就是其中一個,而Integer的值都是保存在一個地址不變的成員變量value。
二、基礎(chǔ)類型、賦值的時候不需要特別指名成員變量(String,基礎(chǔ)類型的封裝類)的引用類型集合參數(shù)
說了那么多基礎(chǔ)類型和引用類型區(qū)別,最主要的一點就是基礎(chǔ)類型是沒有成員變量的,基礎(chǔ)類型可以直接是a=x,而引用類型的值大多需要a.b=x才可以得到,那么獲取基礎(chǔ)類型的集合參數(shù)是最容易的,比如你有個方法是需要獲取一個int的數(shù)組或者list列表,直接在頁面上通過同名的input框就可以辦到了
| 1 2 3 | <input?type="text" value="" name="titleName" id="add_titleName"/> <input?type="text" value="" name="titleName" id="add_titleName"/> <input?type="text" value="" name="titleName" id="add_titleName"/> |
?后臺獲取
| 1 | public void getParmas(List<String> titleName) |
?或者
| 1 | public void getParmas(String[] titleName) |
?都可以獲取到titleName的值。
這里String不是8大基礎(chǔ)類型,但是String和基礎(chǔ)類型有個共同的特點,就是賦值的時候不需要特別指名成員變量,包括基礎(chǔ)類型的封裝類一樣。
三、賦值的時候不需要特別指名成員變量引用類型的集合參數(shù)
這些類基本上都是我們自己組建的業(yè)務(wù)邏輯類,很多情況下還包含了相互組合的關(guān)系,先說第一種情況,單純的接收一個List<?> xxx;
| 1 2 3 4 | @RequestMapping("/add") ????public?void?add(Model model,List<SysRole> sysRole){ ?????。。。。 ????} |
?這樣的方式是不行的,會報Could not instantiate bean class [java.util.List]: Specified class is an interface這個異常。
Servlet.service() for servlet [springServlet] in context with path [/bid] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface怎么解決了?
需要我們用到第二種情況。
接收一個帶有l(wèi)ist成員變量的的對象,比如你有個類是User,一個User可以有多個聯(lián)系電話,
class User{List<Contact> contactList; }我們要獲取一個帶有多個聯(lián)系人的user參數(shù)
public void addUser(User user){ ..... }在頁面上直接可以通過
<input type="text" value="" name="user.contactList[0].phone" id="add_contact_phone_1"/>這樣的方式進行獲取參數(shù)。
那我們碰到第一種情況怎么辦呢?把它變成第二種方式進行處理,也就是說新建一個包裝類專門來包裝類似的需要接收的list參數(shù)。
為什么第一種方式不行了?
因為spring mvc 中獲取參數(shù)的方式不管有多少種,他的本質(zhì)依然是
request.getParameter("name")那把這個參數(shù)封裝到一個對象中,也只能是同setter方法,那問題的關(guān)鍵是如何找到這個setter
方法?肯定是setName中的name和request中的name對應(yīng)。這才能找到。你想,如果你單純接收一個list參數(shù),list雖然有g(shù)et和set方法,但是沒有名字呀,只能根據(jù)數(shù)組下標(biāo)來判斷參數(shù)位置。所以只能通過第二種方法進行參數(shù)傳遞
總結(jié)
以上是生活随笔為你收集整理的spring mvc 如何传递集合参数(list,数组)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家常枣糕的做法?
- 下一篇: MVC全局用户验证之HttpModule