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. java中迭代器应用

    本文将利用分析代码的方式,来学习一个集合类的内部结构,以及遍历集合的迭代模式的源码实现细节. 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应It ...

  2. 使用 NSPropertyListSerialization 持久化字典与数组

    NSPropertyListSerialization The NSPropertyListSerialization class provides methods that convert prop ...

  3. apache kafka消息服务

    apache kafka中国社区QQ群:162272557 apache kafka参考 http://kafka.apache.org/documentation.html 消息队列分类: 点对点: ...

  4. oracle 日期相减 转载

      转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减2012-02-10 12 ...

  5. Bash,Vim,gdb&git常用命令

    Bash 目录 pwd  //查看当前目录 mkdir dir1 dir2  //创建目录 tree dir1 mv test1.cpp test2.cpp dir1 dir  //移动文件/目录到目 ...

  6. 网站功能操作分布引导插件:Intro.js介绍;React里如何使用Intro.js以及如何进行分页导航

    插件作用:使用向导,引导新用户正确使用Web网站.我的环境是React+Mobx. 基本使用介绍,参加代码地址里的README.md:https://github.com/usablica/intro ...

  7. 洛谷P1772 [ZJOI2006]物流运输 题解

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  8. 我也用github(2)——关联本地工程到github仓库

    github只是为我们提供了一个存储的功能,我们也可以准备一个服务器(当然,能联网是前提了),将版本库保存到服务器上. 本文以github为例进行实验. 1. 在github上创建一个仓库 这个非常简 ...

  9. 附4 springboot源码解析-run()

    public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); / ...

  10. ASP.NET MVC中使用jQuery时的浏览器缓存问题

    介绍 尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议. 首先要做的事情是在服务器端支持HTTP GET,定义不同的URL输出不同的数据( ...