在请求处理方法可出现和返回的参数类型中,最重要的就是Model和ModelAndView。对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而试图View则用于渲染模型数据

如何将模型数据传递给试图使Spring  MVC框架的一项重要工作

  >>Model和ModelMap

  >>ModelAndView

  >>@ModelAttribute

  >>@SessionAttribute

1.Model和ModelMap

  Spring MVC在内部使用了一个org.springframework.ui.Model接口存储模型数据,功能类似java.util.Map接口,但是比Map易于使用。org.springframework.ui.ModelMap接口实现了Map接口

  Spring MVC在调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储容器。如果处理方法的参数为Model或者ModelMap类型,则SpringMVC会将隐含类型的引用传递给这些参数。在处理方法内部,开发者就可以通过这个参数对象访问模型中的所有数据,也可以向模型中添加新的属性数据。

  在处理方法中,Model和ModelMap对象都可以使用如下方法添加模型数据:

    >>addObject(String attributeName,Object attributeValue)  

@Controller
public class User1Controller{ private static final Log logger = LogFactory.getLog(User1Controller.class); // @ModelAttribute修饰的方法会先于login调用,该方法用于接收前台jsp页面传入的参数
@ModelAttribute
public void userModel(String loginname,String password,
Model model){
logger.info("userModel");
// 创建User对象存储jsp页面传入的参数
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
// 将User对象添加到Model当中
model.addAttribute("user", user);
} @RequestMapping(value="/login1")
public String login(Model model){
logger.info("login");
// 从Model中当中取出之前存入的名为user的对象
User user = (User) model.asMap().get("user");
System.out.println(user);
// 设置User对象的username属性
user.setUsername("测试");
return "result1";
} }

@ModelAtttribute修饰的userModel方法会先于login调用,它把请求参数值赋给对应变量,可以向方法中的Model添加对象,前提是要在方法签名中加入一个Model类型的参数。

@Controller
public class User2Controller{
private static final Log logger = LogFactory.getLog(User2Controller.class); @ModelAttribute
public void userMode2(String loginname,String password,
ModelMap modelMap){
logger.info("userMode2");
// 创建User对象存储jsp页面传入的参数
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
// 将User对象添加到ModelMap当中
modelMap.addAttribute("user", user);
} @RequestMapping(value="/login2")
public String login2(ModelMap modelMap){
logger.info("login2");
// 从ModelMap当中取出之前存入的名为user的对象
User user = (User) modelMap.get("user");
System.out.println(user);
// 设置user对象的username属性
user.setUsername("测试");
return "result2";
} }

两个例子代码功能基本一致,只是存储对象由Model改为ModelMap

2.ModelAndView

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

添加模型数据:

addObject(String attributeName,Object attributeValue)

可以通过如下方法设置视图:

setViewName(String viewName)

@Controller
public class User3Controller{
private static final Log logger = LogFactory.getLog(User3Controller.class); @ModelAttribute
public void userMode3(String loginname,String password,
ModelAndView mv){
logger.info("userMode3");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
// 将User对象添加到ModelAndView的Model中
mv.addObject("user", user);
} @RequestMapping(value="/login3")
public ModelAndView login3(ModelAndView mv){
logger.info("login3");
// 从ModelAndView的Model当中取出之前存入的名为user的对象
User user = (User) mv.getModel().get("user");
System.out.println(user);
// 设置user对象的username属性
user.setUsername("测试");
// 设置返回的视图名称
mv.setViewName("result3");
return mv;
}
}

Model和ModelAndView的更多相关文章

  1. SpringMVC的Model ModeMap ModelAndView @ModelAttribute @SessionAttribute区分

    Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute.@SessionAttributes以及Model的使用介绍 ...

  2. springboot中model,modelandview,modelmap的区别与联系

    springboot 中Model,ModelAndView,ModelMap的区别与联系 Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类 public c ...

  3. Model & ModelMap & ModelAndView 比较ModelFactory简介

    Model: 是一个接口,其实现类必继承ModelMap. ModelMap: 继承与LinkedHashMap,相当于自定义了一个map. ModelAndView: 里面封装了两个对象,其中vie ...

  4. SpringMVC中的Model和ModelAndView的区别

    1.主要区别 Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到jsp页面中:ModelAndView包含model和view两部分,使用时需要自己实 ...

  5. 后台将数据传回前台的三种绑定的方式(Model,Map.ModelAndView)

    //方式1:通过model 将数据绑定 @RequestMapping(value = "findByIdModel", method = RequestMethod.GET) p ...

  6. Model ModelMap ModelAndView

    前言 Spring MVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器. 如果方法的入参为ModelMap,Model,Map类型,Spring MVC会将隐含模型的引用传递给这些入参. ...

  7. Spring框架中ModelAndView、Model、ModelMap区别

    原文地址:http://www.cnblogs.com/google4y/p/3421017.html SPRING框架中ModelAndView.Model.ModelMap区别   注意:如果方法 ...

  8. SpringMVC ModelAndView、Map、Model、ModelMap

    目标方法返回值可以是ModelAndView .Map.Model.ModelMap类型,但最根本还都是ModelAndView. 其中可以包含试图和模型信息. SpringMVC 会把ModelAn ...

  9. spring mvc EL ModelAndView的 Model 值 在jsp中不显示

    问题:spring mvc开发过程中, 经常会给model addAttribute, 然后通过EL在jsp中显示,比如 ${msg}, 但是有时候会出现jsp最后显示的还是${msg},而不是msg ...

随机推荐

  1. visual core 运行 .net core bug处理

    launch: program 'launch: launch.json must be configured. Change 'program' to the path to the executa ...

  2. deeplearning.ai 人工智能行业大师访谈 Ian Goodfellow 听课笔记

    1. Ian Goodfellow之前是做神经科学研究,在斯坦福上了Andrew NG的课之后,Ian决定投身AI.在寒假他和小伙伴读了Hinton的论文,然后搭了一台用CUDA跑Boltzmann ...

  3. LightOJ1012-Guilty Prince-DFS

    Guilty Prince  Time Limit: 2 second(s) Memory Limit: 32 MB Once there was a king named Akbar. He had ...

  4. And Then There Was One(约瑟夫问题变形)

    题目链接:http://poj.org/problem?id=3517 And Then There Was One Time Limit: 5000MS   Memory Limit: 65536K ...

  5. 【原创】最新的"答题热"中,前端的一点小工作

    一.前言 据王思聪引爆全民HQ也3个星期了,总结下最新做的一个有关"答题热"的工具.并借由这个工具的开发,分析当下HybridApp中H5的一些技术. 在百万英雄等节目刚出来的时候 ...

  6. Linux学习之XShell与虚拟机的连接

    最近在慕课网上学习Linux视频,记录一下解决问题的方法和过程. 实验软件环境: 虚拟机软件Vmware Workstation10.0.虚拟机系统CentOS 6.3(32位).XShell 5.0 ...

  7. grunt 插件开发注意事项

    grunt的插件机制 task.loadNpmTasks = function(name) { var root = path.resolve('node_modules'); var tasksdi ...

  8. twitter的ID生成器的snowFlake算法的自造版

    snowFlake算法在生成ID时特别高效,可参考:https://segmentfault.com/a/1190000011282426 SnowFlake算法生成id的结果是一个64bit大小的整 ...

  9. 机器学习——kNN(2)示例:改进约会网站的配对效果

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  10. 最简Java程序

    本文是笔者创建项目--一系列java示例程序的总结.项目位置在SimplestJavaDemos,欢迎访问. 以下为正文: ---   作为一个伪完美主义+拖延癌患者,每次要学习新技术的时候,总是要把 ...