ModelAndView
是 Spring MVC 中用于封装视图名称和模型数据的核心类,常用于控制器方法中。以下是其简要用法:
1. 设置视图名称
如果配置视图解析器,setViewName()方法中的参数,会被进行视图解析,根据视图解析后的地址进行跳转;
- 通过构造函数或
setViewName()
方法设置视图名称。
或ModelAndView modelAndView = new ModelAndView("viewName");
modelAndView.setViewName("viewName");
2. 添加模型数据
- 使用
addObject()
方法将数据添加到模型中,供视图使用。
或批量添加:modelAndView.addObject("key", value);
modelAndView.addAllObjects(Map<String, ?> modelMap);
3. 支持重定向和转发
- 使用
redirect:
或forward:
前缀实现重定向或转发。modelAndView.setViewName("redirect:/newUrl"); // 重定向 modelAndView.setViewName("forward:/newUrl"); // 转发
4. 示例代码
@GetMapping("/user/profile")
public ModelAndView userProfile() {
ModelAndView modelAndView = new ModelAndView("user/profile"); // 视图名称
modelAndView.addObject("user", userService.getUser()); // 模型数据
return modelAndView;
}
@PostMapping("/user/save")
public ModelAndView saveUser(User user) {
userService.save(user);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("redirect:/user/list"); // 重定向
return modelAndView;
}
5. 核心功能
- 封装视图名称:指定要渲染的视图(如 JSP、Thymeleaf 等)。
- 封装模型数据:将数据传递给视图。
- 支持重定向和转发:灵活控制请求流转。
6. 适用场景
- 需要同时设置视图和模型数据。
- 需要动态设置视图名称。
- 需要重定向或转发到其他视图或 URL。
通过ModelAndView
,可以更灵活地控制 Spring MVC 的视图解析和渲染过程。