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. dwz ajax session超时跳转登录页(struts2自定义拦截器)

    1.定义struts2拦截器(网上例子很多) 代码如下: package rt.intercepter; import java.util.Map; import javax.servlet.http ...

  2. 常用的OpenCV函数速查

    常用的OpenCV函数速查 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4 ...

  3. MongoDB:如何正常关闭服务(转)

    原文链接:MongoDB:关闭服务 MongoDB 提供几种关闭服务的命令,具体为以下: 一 使用 Crtl+C 关闭  [mongo@redhatB data]$ mongod --dbpath=/ ...

  4. Mongodb安全认证及Java调用

    Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile. 一.单实例 1.启动服务(先不要加auth参数) 2. ...

  5. 在Java程序中使用Hibernate

    Hibernate是一种ORM框架,ORM全称为Object-Relative Database-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象(一般为实体类) ...

  6. go语言基础之结构体普通变量初始化

    1.结构体 1.1.结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然单独定义以上变量比较繁琐,数据不便于管理. 结构体是一种聚合的数 ...

  7. [Python爬虫]煎蛋网OOXX妹子图爬虫(1)——解密图片地址

    之前在鱼C论坛的时候,看到很多人都在用Python写爬虫爬煎蛋网的妹子图,当时我也写过,爬了很多的妹子图片.后来煎蛋网把妹子图的网页改进了,对图片的地址进行了加密,所以论坛里面的人经常有人问怎么请求的 ...

  8. EventBus 事件总线 原理 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. 分解大量switch-case分支的两种方法

    项目经过长期多人的维护,所谓人多手杂,出现不少过多过长的switch-case分支,或者多重switch-case嵌套.每每添加功能,我都会紧皱眉头,然后带着罪恶感向已经成百上千行的函数里再添上一个c ...

  10. Cognos启用第三方邮件服务代发功能

    很早之前已经说过如何利用cognos计划表定时发送报告给其他邮箱,今天由于第三方的邮箱策略发生了些许的改变,就再来说一下,以网易邮箱为例 如上图所示,如果Cognos要启用网易163作为代理,那么我们 ...