springmvc 編寫modelandview

spring MVC之構造ModelAndView對象

博客分類: spring

 

spring MVC之構造ModelAndView對象

----------

 

構造ModelAndView對象

 

當控制器處理完請求時,通常會將包含視圖名稱或視圖對象以及一些模型屬性的ModelAndView對象返回到DispatcherServlet。因此,經常需要在控制器中構造ModelAndView對象。ModelAndView類提供了幾個重載的構造器和一些方便的方法,讓你可以根據自己的喜好來構造ModelAndView對象。這些構造器和方法以類似的方式支持視圖名稱和視圖對象。

 

 

當你只有一個模型屬性要返回時,可以在構造器中指定該屬性來構造ModelAndView對象:

Java代碼  收藏代碼

  1. package com.apress.springrecipes.court.web;  

  2. ...  

  3. import org.springframework.web.servlet.ModelAndView;  

  4. import org.springframework.web.servlet.mvc.AbstractController;  

  5. public class WelcomeController extends AbstractController{  

  6.     public ModelAndView handleRequestInternal(HttpServletRequest request,  

  7.         HttpServletResponse response)throws Exception{  

  8.         Date today = new Date();  

  9.         return new ModelAndView("welcome","today",today);  

  10.     }  

  11. }  

 

 

如果有不止一個屬性要返回,可以先將它們傳遞到一個Map中再來構造ModelAndView對象。

Java代碼  收藏代碼

  1. package com.apress.springrecipes.court.web;  

  2. ...  

  3. import org.springframework.web.servlet.ModelAndView;  

  4. import org. springframework.web.servlet.mvc.AbstractController;  

  5. public class ReservationQueryController extends AbstractController{  

  6.     ...  

  7.     public ModelAndView handleRequestInternal(HttpServletRequest request,  

  8.         HttpServletResponse response)throws Exception{  

  9.         ...  

  10.         Map<String,Object> model = new HashMap<String,Object>();  

  11.         if(courtName != null){  

  12.             model.put("courtName",courtName);  

  13.             model.put("reservations",reservationService.query(courtName));  

  14.         }  

  15.         return new ModelAndView("reservationQuery",model);  

  16.     }  

  17. }  

 

 

Spring也提供了ModelMap,這是java.util.Map實現,可以根據模型屬性的具體類型自動生成模型屬性的名稱。 

Java代碼  收藏代碼

  1. package com.apress.springrecipes.court.web;  

  2. ...  

  3. import org.springframework.ui.ModelMap;  

  4. import org.springframework.web.servlet.ModelAndView;  

  5. import org.springframework.web.servlet.mvc.AbstractController;  

  6. public class ReservationQueryController extends AbstractController{  

  7.     ...  

  8.     public ModelAndView handleRequestInternal(HttpServletRequest request,  

  9.         HttpServletResponse response)throws Exception{  

  10.         ...  

  11.         ModelMap model = new ModelMap();  

  12.         if(courtName != null){  

  13.             model.addAttribute("courtName",courtName);  

  14.             model.addAttribute("reservations",reservationService.query(courtName));  

  15.         }  

  16.         return new ModelAndView("reservationQuery",model);  

  17.     }  

  18. }  

由於這兩個模型屬性的類型爲String和List<Reservation>,ModelMap會爲它們生成默認的名稱----stringreservationList。如果你不喜歡這些名稱,可以顯式地指定它們

 

 

構造完ModelAndView對象之後,仍然可以利用addobject()方法爲它添加模型屬性。這個方法返回ModelAndView對象

本身,因此可以在一個語句中構造ModelAndView對象。請注意,你也可以省略addObject()方法的屬性名稱。在這種情況下,這個方法會與ModeMap生成相同的屬性名稱。

Java代碼  收藏代碼

  1. package com.apress.springrecipes.court.web;  

  2. ...  

  3. import org.springframework.web.servlet.ModelAndView;  

  4. import org.springframework.web.servlet.mvc.AbstractController;  

  5. public class ReservationQueryController extends AbstractController{  

  6.     ...  

  7.     public ModelAndView handleRequestInternal(HttpServletRequest request,  

  8.         HttpServletResponse response)throws Exception{  

  9.         ....  

  10.         List<Reservation> reservations = null;  

  11.         if(courtName != null){  

  12.             reservations = reservationService.query(courtName);  

  13.         }  

  14.         return new ModelAndView("reservationQuery","courtName",courtName)  

  15.             .addObject("reservations",reservations);  

  16.     }  

  17. }  

事實上,返回的模型和視圖都是可選的。在有些情況下,你只返回視圖,模型中沒有任何屬性。或者只返回模型,讓Spring MVC根據請求URL來決定視圖。有時候,如果讓控制器直接處理HttpServletResponse對象,甚至可以返回null,例如在將二進制文件返回給用戶的時候。

 


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