springmvc—B站学习04
数据输出:如何将数据带出给页面
SpringMVC除了在方法上传入原生request和session外还能怎样把数据带给页面
方式一:
可以在方法处传入一个Map,Model,ModelMap作为参数,给这些参数里面保存的所有数据都会放在==请求域==中,在页面可以获取。
Map,Model,ModelMap,这三个最终都是BindingAwareModelMap在工作,相当于给BindingAwareModelMap中保存的东西都会放在请求域中
Map,Model是接口类型,Map是jdk的接口,Model是Spring中的接口,ModelMap是一个类,
但是ModelMap继承了LinkedHashMap,所以说ModelMap是在Map旗下的,
但是这三个都用的是BindingAwareModelMap,我们看BindingAwareModelMap源码,
发现BindingAwareModelMap继承ExtendModelMap,
但是ExtendModelMap继承ModelMap,实现Model
例:
@RequestMapping("/list")
public String list(Model model){
model.addAttribute("msg","你好");
return "page";
}
方式二:
方法的返回值可以变成ModelAndView,这个既包含视图信息(页面地址),也包含模型数据(给页面带的数据),而且数据是放在请求域中的,返回值是ModelAndView,可以为页面携带数据
方式三:
SpringMvc提供了一种给session域中保存数据的方式 (这个信息如果需要一直访问的话就最好存入session中) ,使用一个注解@SessionAttributes,但一般不推荐,真想存数据还是使用原生API比较好,因为可控
@SessionAttributes:
1.标在类上
2.@SessionAttributes(value="msg")表示给BindingAwareModelMap或者ModelAndView中保存的数据,同时也给session中放一份
其中value指的是,保存key是msg的数据放入到session中
3.属性:
value="msg" 表示只保存key是msg的数据,给session中也放一份
type={ String.class } 表示只保存这种类型的数据,给session中也放一份