一、基础
- Model
是数据容器,只负责存放数据,不保存视图名称。
java
public class Usercontroller1 {
@RequestMapping("/test1")//映射地址
public String test1(Model model){//传对象参数
System.out.println(model);
model.addAttribute("model","springmvc1234");
return "test";//页面WEB-INF/jsp/test.jsp
}
返回值 String:代表跳转的视图名
数据放 Model,视图名单独 return
- ModelAndView(常用主流)
同时封装两部分:Model(数据) + View(视图名称)
java
ModelAndView mv = new ModelAndView();
mv.addObject("msg1","spring");//保存数据k-v模式
mv.addObject("m",new User("123"));
mv.setViewName("hello");//跳转set的页面并且在其中取值
return mv;
二、常用方法
Model:
java
model.addAttribute("key",value);
model.addAllAttributes(map);
ModleAndView:
java
mav.addObject("key",value); //存数据
mav.setViewName("login"); //设置视图
//支持转发、重定向
mav.setViewName("forward:/user/list");
mav.setViewName("redirect:/login");
日常开发大多数使用 Model + 返回 String,代码简洁;
如果需要在方法内部多处动态切换视图,适合使用 ModelAndView
三、区别
Model:仅存储数据,视图名称由方法返回字符串提供;
ModelAndView:同时包含数据和视图名称,封装为一个对象;
两者数据都存放在 request 域,一次请求有效;
视图解析器最终根据视图名跳转页面。
java
//方式1 Model + String
public String demo(Model model){
model.addAttribute("name","张三");//存值
return "index";//返回值=页面
}
//方式2 ModelAndView
public ModelAndView demo(){
ModelAndView mav=new ModelAndView();
mav.addObject("name","张三");//存值
mv.setViewName("hello");//跳转set的页面并且在其中取值
return mav;
}
封装(三大特性)
权限控制:private属性 + get/set,保护数据。
封装成对象
功能:把一组相关数据整合在一起,方便传输、保存。