問題描述:當我們使用表單傳值得時候,如果定義了,name,address,age。等屬性,那么通過表單傳過去的值就只有這3個屬性,但是我們需要的name,pass,address,age等四個屬性。那么在提交表單并賦值的時候就會出現,未得到的值為null的情況。如下圖:
獲取的pass為null
那么我們需要用@ModelAttribute注解來解決他:
實現代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@ModelAttribute public void getUsers( @RequestParam (value= "name" ,required= false ) String name,Map<String, Object> map){ if (name!= null ){ System.out.println( "調用ModelAttribute" ); //模擬從數據庫中獲取的對象。 System.out.println( "從數據庫中獲取一個對象" +users); map.put( "user" ,users); } } @RequestMapping ( "/getInfo" ) public String getServletAPI(User user){ String viewName = "hello" ; System.out.println( "修改:" +user); return viewName; } |
@ModelAttribute注解的方法,在這個控制器中不管其他任何一個方法被調用,都會執行。
以上代碼的運行流程為:
1.首先執行@ModelAttribute注解修飾的方法,從數據庫中查找出對應要修改的對象,把值放在map鍵值對中,key應該和處理請求的方法傳入的參數名一樣,如:此處定義的傳入參數名為user,那么map.put(“user”,值(從數據庫中查詢的對象))。這個Map需要定義在方法入參的地方(代碼如上)。
2.Spring MVC會從Map中找出user對象,并把表單請求參數賦值給該user對象,只有表單定義了的屬性才會被替換,沒定義的為null,不改變。所以要求@ModelAttribute修飾的方法中定義的key的名稱要和控制器方法(@RequestMapping()修飾的方法)中入參的名稱要一致。否則沒效果。
3.Spring MVC 把上述對象傳入目標方法的參數。
注意:在@ModelAttribute 修飾的方法中,放入到map時的鍵要和目標方法入參類型的參數名一致。
最終效果:
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!
原文鏈接:http://www.cnblogs.com/caijh/p/6413998.html