3.2.5 ModelAndView

3.2.5 ModelAndView

控制器处理方法的返回值如果是ModelAndView,则其既包含模型数据信息,也包含视图信息,这样Spring MVC将使用包含的视图对模型数据进行渲染。可以简单地将模型数据看成一个Map<String,Object>对象.

添加模型数据 addObject

在处理方法中可以使用ModelAndView对象的如下方法添加模型数据:
addObject(String attributeName,Object attributeValue);

设置视图 setViewName

可以通过如下方法设置视图:
setViewName(String viewName);

示例: ModelAndView的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package org.fkit.controller;

import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

// Controller注解用于指示该类是一个控制器,可以同时处理多个请求动作
@Controller
public class ModelAndViewController
{
@RequestMapping(value = "/ModelAndViewTest")
public ModelAndView ModelAndViewTest(ModelAndView mv)
{
System.out.println("ModelAndViewTest");
User user = new User();
// 设置user对象的username属性
user.setUsername("小明");
// 将User对象添加到ModelAndView当中
mv.addObject("user", user);
// 设置要转发的页面
mv.setViewName("result");
// 返回ModelAndView对象
return mv;
}
}

ModelAndViewTest方法中创建了一个自定义的User对象,并且给username属性赋值。
使用ModelAndView对象的addObject("user", user)方法将User对象添加到ModelAndView当中,即JSPrequest Scope当中。
同时调用setViewName("result")方法设置要转发的页面。

此处需要注意的是,方法的返回值必须是ModelAndView,方法的返回结果必须是ModelAndView对象,否则保存在ModelAndView对象中的"user"result.jsp页面中获取不到。