在请求处理方法可出现和返回的参数类型中,最重要的就是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. centos6.x升级protobuf操作流程.

    1.首先卸载protobuf,使用命令如下: sudo yum remove protobuf 2.下载protobuf源,依据自己的需要下载: 2.1下载地址:https://github.com/ ...

  2. unison+inotify实现数据双向同步

    unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH.RSH和Socket等网络协议进行同步.更棒的是,unison支持双向同步操作 ...

  3. CTF---Web入门第三题 这个看起来有点简单!

    这个看起来有点简单!分值:10 来源: 西普学院 难度:易 参与人数:10515人 Get Flag:3441人 答题人数:4232人 解题通过率:81% 很明显.过年过节不送礼,送礼就送这个 格式: ...

  4. 安装myeclipse后,打开时弹出:“该站点安全证书的吊销证书不可用”,怎样解决?

    1.当弹出"该站点安全证书的吊销信息不可用.是否继续?"的对话框时,点击"查看证书",切换到"详细信息"TAB页,找到其"CRL分 ...

  5. Windows下MYSQL读取文件为NULL

    只记录解决问题的方法. mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE(&qu ...

  6. dblink实现不同用户之间的数据表访问

    1.dblink 1.创建dblink,如果在用户A下创建dblink,名称为TEST_DBLINK; 去操作GCFR_33用户下的表数据等等, 那么在查询表数据的sql就要加上dblink了.如下是 ...

  7. python中强大的format函数

    自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串.语法 它通过{}和:来代替%. 请看下面的示例,基本上总结了format函数在python ...

  8. 图像插值:OpenCV_remap

    此为opencv中remap函数移植和分析,整理了双线性的插值部分的代码尚未完全移植,但最困难的部分已经完成,而恰巧在这时,发现其实现并不是那么的令我满意,于是终止,改为自己实现.考虑到以后可能会用到 ...

  9. js_3_for_if_try

    在js中有哪些特殊变量? null 指向一个空地址,一个特殊的地址 var u 定义了一个特殊变量u,类型未定义,boolean(u)=false js中的for循环是什么样子? 对列表: for(v ...

  10. python_面向对象

    什么是面向对象? -- 一种主流编程范式,编程思维框架,世界主流两个方向,面向对象和面向过程. --  面向是把关注点集中一个具体东西,比如看向手机,也叫面向手机,手机就是一个对象,我们 把手机的属性 ...