spring MVC之构造ModelAndView对象

----------

构造ModelAndView对象

当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。

当你只有一个模型属性要返回时,可以在构造器中指定该属性来构造ModelAndView对象:

  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对象。

  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实现,可以根据模型属性的具体类型自动生成模型属性的名称。

  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会为它们生成默认的名称----string和reservationList。如果你不喜欢这些名称,可以显式地指定它们。

构造完ModelAndView对象之后,仍然可以利用addobject()方法为它添加模型属性。这个方法返回ModelAndView对象

本身,因此可以在一个语句中构造ModelAndView对象。请注意,你也可以省略addObject()方法的属性名称。在这种情况下,这个方法会与ModeMap生成相同的属性名称。

  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,例如在将二进制文件返回给用户的时候。

spring MVC之构造ModelAndView对象的更多相关文章

  1. spring mvc 3.0 ModelAndView模型视图类

    见名知意,从名字上我们可以知道ModelAndView中的Model代表模型,View代表视图.即,这个类把要显示的数据存储到了Model属性中,要跳转的视图信息存储到了view属性.我们看一下Mod ...

  2. [Java Web学习]Spring MVC使用普通类对象,声明的对象为null

    由于对Spring还不熟悉,目前还处于学习阶段,因此经常会遇到一些小白问题,这个问题需要在Spring文件中将普通对象注入bean,然后在MVC中添加set方法,填充普通对象.

  3. Spring MVC(九)--控制器接受对象列表参数

    前一篇文章介绍是传递一个参数列表,列表中的元素为基本类型,其实有时候需要传递多个同一类型的对象,测试也可以使用列表,只是列表中的元素为对象类型. 我模拟的场景是:通过页面按钮触发传递参数的请求,为了简 ...

  4. Spring MVC中如何传递对象参数

    springController: @Controller @RequestMapping("/user") public UserController extends BaseC ...

  5. Spring MVC控制层传递对象后在JSP页面中的取值方法

    List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 3; i++) { Order t = ...

  6. spring mvc 处理pojo传递对象时该对象继承父类的属性在网络接收端接收该属性值总是null,why?

    //=========================== 情形一: ===============================//在网络上传递User1类对象时info属性值在网络的另一端能够接 ...

  7. 二十、MVC的WEB框架(Spring MVC)

    一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...

  8. Spring MVC教程——检视阅读

    Spring MVC教程--检视阅读 参考 Spring MVC教程--一点--蓝本 Spring MVC教程--c语言中午网--3.0版本太老了 Spring MVC教程--易百--4.0版本不是通 ...

  9. Spring MVC对象转换说明

    在Spring MVC之前我们需要在Servlet里处理HttpServletRequest参数对象,但这个对象里的属性都是通用类型的对象(如字符串),处理起来很繁琐并且容易出错,而Spring MV ...

随机推荐

  1. 清除 Windows 系统垃圾的 bat

    @echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpde ...

  2. Log4j输出格式控制

    参数说明例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字空间是& ...

  3. 【Burnside定理】&【Pólya定理】

    Burnside & Pólya (详细内容请参阅<组合数学>或2008年cyx的论文,这里只写一些我学习的时候理解困难的几个点,觉得我SB的请轻鄙视……如果有觉得不科学的地方欢迎 ...

  4. 怎样通过terminal得到AWS EC2 instance的ip

    可得到private ip,也是本地的ip.事实上通过ifconfig也能得到: GET http://169.254.169.254/latest/meta-data/local-ipv4 公共ip ...

  5. Informatica 常用组件Source Qualifier之七 输入过滤器

    通过输入源过滤器,可以降低 PowerCenter  查询的行数.如果在源过滤器中包括字符串 "WHERE" 或较大对象,PowerCenter 将使会话失败. 源限定符转换包括默 ...

  6. 如何解决 SQL Server 中的锁升级所致的阻塞问题

    概要 锁升级为表锁插入转换很多细粒度的锁 (如行或页锁) 的过程.Microsoft SQL Server 动态确定何时执行锁升级.作出决定之前,SQL Server 将特定的扫描,整个事务,并且用于 ...

  7. eclipse全屏模式

  8. (转)unity3d插件 HUD Text 学习

    转自:http://www.cnblogs.com/code1992/p/3657291.html 使用版本 NGUI_HUD_Text_v1.11 .英语水平差,难免有很多不足之处,忘批评指正.本文 ...

  9. mybatis如何根据mapper接口生成其实现类(springboot)

    序 mybatis里头给sqlSession指定执行哪条sql的时候,有两种方式,一种是写mapper的xml的namespace+statementId,如下: public Student fin ...

  10. [Node.js] Child Process with fork() to handle heavy calculation process

    When build server, if we have a API endpoint requires some heavy calculation process, it will block ...