Model ModelMap ModelAndView
前言
- Spring MVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
- 如果方法的入参为ModelMap,Model,Map类型,Spring MVC会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所以数据,也可以向模型中添加新的属性数据。
三种方式处理模型数据
- Map.put(string,object);
- Model.AddAttribute(string,object);
- ModelMap.AddAttribute(string,object);
注·:以上三种方式向前端传值,不能加@responsebody注解
Model(org.springframework.ui.Model)
Model是一个接口,包含addAttribute方法。
一个控制器可以拥有多个@ModelAttribute方法。同个控制器内的所有这些方法,都会在@RequestMapping方法之前被调用。
@ModelAttribute标记的方法会先执行,然后把它们返回的对象存放到模型中。
//@ModelAttribute修饰的方法:当/login请求时,会先于/login调用,该方法用于接收前台jsp页面传入的参数
@ModelAttribute("user1")
public void userModel(String name,String password,Model model){
// 创建User对象存储jsp页面传入的参数
User user = new User();
user.setName(name);
user.setPassword(password);
// 将User对象添加到Model当中
model.addAttribute("user2", user);
return new User("ld",12) ;
}
@RequestMapping(value="/login")
public String login(Model model){
// 从Model当中取出之前存入的名为user的对象
User user2 = (User) model.asMap().get("user2");
return "result";
}
也可以:
@RequestMapping(value = "/login")
public String login(@ModelAttribute("user1") User user1) {
user1.setUserName("jizhou");
return "result";
}
ModelMap(org.springframework.ui.ModelMap)
Mode还是ModelMap底层都是使用BindingAwareModelMap,所以两者基本没什么区别
Spring框架自动创建modelmap的实例,并作为controller方法的参数传入,用户无需自己创建对象。
ModelMap对象主要用于把controller方法处理的数据传递到jsp界面,在controller方法中把jsp界面需要的数据放到ModelMap对象中即可。
ModelAndView(org.springframework.web.servlet.ModelAndView)
ModelAndView对象有两个作用:
设置url地址(这也是ModelAndView和ModelMap的主要区别)。
把controller方法中处理的数据传到jsp页面,在controller方法中把jsp界面需要的数据放到ModelAndView对象中即可。
Model是每次请求可以自动创建的,而ModelAndView是需要自行new
在界面上可以通过el表达式${key}来获取Model中的数据。
controller方法的返回值如果是ModelAndView,则其即包含模型数据信息,又包含视图信息,这样SpringMVC将使用包含的视图对模型数据进行渲染,可以简单地将模型数据看成一个Map<String, Object>对象。
@RequestMapping("/list")
public ModelAndView list() {
//创建一个模型视图对象
ModelAndView mav = new ModelAndView();
List<Category> cs = categoryService.list();
mav.addObject("cs", cs);
mav.setViewName("admin/listCategory");
return mav;
}
@SessionAttributes
@SessionAttributes用于在会话中存储Model的属性,一般作用在类的级别。
@SessionAttributes(value={"user"})将model中属性名为user的数据copy一份进了session域中。
model的属性user1会被存储到session中
@Controller
@SessionAttributes(value={"user1","attr2"})
public class ModelController {
@ModelAttribute("user1")
public User initUser(){
User user1 = new User();
user1.setName("default");
return use1r;
}
}
@SessionAttribute是用于获取已经存储的session数据,并且作用在方法的层面上。
@RequestMapping("/user")
public String session(@SessionAttribute("user1") User user1){
// do something
return "success";
}
@SessionAttributes(types=User.class)
会将model中所有类型为 User 的属性添加到会话中。
@SessionAttributes(value={"user1", "user2"})
会将model中属性名为user1和user2的属性添加到会话中。
@SessionAttributes(types={User.class, Dept.class})
会将model中所有类型为 User 和 Dept 的属性添加到会话中。
@SessionAttributes(value={"user1", "user2"},types={Dept.class})
会将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。
Model ModelMap ModelAndView的更多相关文章
- Model & ModelMap & ModelAndView 比较ModelFactory简介
Model: 是一个接口,其实现类必继承ModelMap. ModelMap: 继承与LinkedHashMap,相当于自定义了一个map. ModelAndView: 里面封装了两个对象,其中vie ...
- SpringMVC Map Model ModelMap 和 ModelAndView
代码: package com.gaussic.controller; import com.gaussic.model.AccountModel; import org.springframewor ...
- springMVC Model ModelMap 和 ModelAndView的区别(转)
原文地址:springMVC Model ModelMap 和 ModelAndView的区别 近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndVie ...
- Spring中Model,ModelMap以及ModelAndView之间的区别
原文链接:http://blog.csdn.net/zhangxing52077/article/details/75193948 Spring中Model,ModelMap以及ModelAndVie ...
- Model/ModelMap 和 ModelAndView 的区别使用
Model/ModelMap 和 ModelAndView 的区别使用 Model/ModelMap controller: package springmvc.controller; import ...
- SpringMVC学习 -- ModelAndView , Model , ModelMap , Map 及 @SessionAttributes 的使用
输出模型数据: ModelAndView:处理方法返回值类型为 ModelAndView 时 , 其中包含视图和模型信息.方法体即可通过该对象添加模型数据 , 即 SpringMVC 会把 Model ...
- SpringMVC Model,ModelMap ModelAndView
SpringMVC 调用方法之前会创一个隐含的模型对象(即Model,ModelMap ModelAndView) //@ModelAttribute 先于login方法执行 @ModelAttrib ...
- springboot中model,modelandview,modelmap的区别与联系
springboot 中Model,ModelAndView,ModelMap的区别与联系 Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类 public c ...
- Model和ModelAndView
在请求处理方法可出现和返回的参数类型中,最重要的就是Model和ModelAndView.对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而试图View则用于渲染模 ...
随机推荐
- zdump - 时区输出器
SYNOPSIS 总览 zdump [ -v ] [ -c cutoffyear ] [ zonename ... ] 描述 Zdump 对命令行中的每一个 zonename 输出其当前时间. 提供了 ...
- 佳佳的 Fibonacci
佳佳的 Fibonacci \(f_n=f_{n-1}+f_{n-2},f_1=f_2=1\),求\(f_1+2f_2+3f_3+...+nf_nmod\ m,1≤n,m≤2^{31}-1\). 解 ...
- shell脚本将命令的结果赋值给变量的2种写法
Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式: variable=`command`variable=$(command) 第一种方式把命令用反引号` `(位于 Esc 键的下方 ...
- leetcood学习笔记-88-合并两个有序数组
题目描述: 第一次提交: class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -&g ...
- Android中的Parcel机制(上)
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态, ...
- NX二次开发-NXOpen::WCS Class Reference
NX11+VS2013 #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include < ...
- CSS 圣杯布局
前端的两个经典布局想必大家都有多了解--圣杯布局和双飞翼布局,因为它既能体现你懂HTML结构又能体现出你对DIV+CSS布局的掌握. 事实上,圣杯布局其实和双飞翼布局是一回事.它们实现的都是三栏布局, ...
- (转)Java 标注(Annotation)详解
转:http://blog.csdn.net/nbrremix/article/details/7337274 元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所 ...
- TCP之1460MSS和1448负载
TCP和1448 1448字节是实际场景下,单个TCP包的实际运载能力.也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送.单个TCP包每次打包1 ...
- python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...