目录

1、Model接口

2、ModelMap

3、ModelAndView

1、Model接口(org.springframework.ui.Model)

Model是一个接口,包含addAttribute方法,其实现类是ExtendedModelMap。

ExtendedModelMap继承了ModelMap类,ModelMap类实现了Map接口。

public class ExtendedModelMap extends ModelMap implements Model

Model通过以下方法向页面传递参数:

@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页面传入的参数
User2 user = new User2();
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的对象
User2 user = (User2) model.asMap().get("user");
System.out.println(user);
// 设置user对象的username属性
user.setUsername("测试");
return "result1";
}

前台: (1) loginForm1.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试Model</title>
</head>
<body>
<h3>测试Model</h3>
<form action="login1new" method="post">
<table>
<tr>
<td><label>登录名: </label></td>
<td><input type="text" id="loginname" name="loginname" ></td>
</tr>
<tr>
<td><label>密码: </label></td>
<td><input type="password" id="password" name="password" ></td>
</tr>
<tr>
<td><input id="submit" type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>

result1.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试@ModelAttribute(value="")注释返回具体类的方法</title>
</head>
<body>
访问request作用范围域中的model对象:${requestScope.user.loginname }<br>
访问request作用范围域中的model对象:${requestScope.user.password }<br>
访问request作用范围域中的model对象:${requestScope.user.username }<br>
<br>
</body>
</html>

运行结果:

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

User1Controller.java可以简化为:

@RequestMapping(value="/login1new")
public String login(Model model, @ModelAttribute User2 user){
user.setUsername("测试2");
System.out.println(user.toString());
model.addAttribute("user", user);
return "result1";
}

2、ModelMap(org.springframework.ui.ModelMap)

Spring框架自动创建modelmap的实例,并作为controller方法的参数传入,用户无需自己创建对象。 ModelMap对象主要用于把controller方法处理的数据传递到jsp界面,在controller方法中把jsp界面需要的数据放到ModelMap对象中即可。 通过以下方法向页面传递参数:

3、ModelAndView(org.springframework.web.servlet.ModelAndView)

ModelAndView对象有两个作用:

(1) 设置url地址(这也是ModelAndView和ModelMap的主要区别)。

(2) 把controller方法中处理的数据传到jsp页面,在controller方法中把jsp界面需要的数据放到ModelAndView对象中即可。然后return mv。它的作用类似request对象的setAttribute方法。通过以下方法向页面传递参数:

controller方法的返回值如果是ModelAndView,则其即包含模型数据信息,又包含视图信息,这样SpringMVC将使用包含的视图对模型数据进行渲染,可以简单地将模型数据看成一个Map<String, Object>对象。

@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");
User2 user = new User2();
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的对象
User2 user = (User2) mv.getModel().get("user");
System.out.println(user);
// 设置user对象的username属性
user.setUsername("测试");
// 地址跳转,设置返回的视图名称
mv.setViewName("result3");
return mv;
}

前台:result3.jsp

<body>
访问ModelAndView中的数据:${user.loginname}<br>
访问ModelAndView中的数据:${user.password}<br>
访问ModelAndView中的数据:${user.username}<br>
</body>

运行结果:

详情:https://www.cnblogs.com/zeroingToOne/p/8945066.html

总结:在controller方法中把jsp界面需要的数据放到ModelAndView对象中(通过addObject()方法) ,设置解析视图后跳转的url地址(通过setViewName()方法) 。数据的model,视图是View(跳转)

  @RequestMapping(value = "/get")
public ModelAndView get(HttpServletRequest request){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/cmfz/media/mediaManager");
return modelAndView;
}

重定向:

  @RequestMapping(value = "/jumpLogin")
public ModelAndView jumpLogin(HttpServletRequest request){
ModelAndView modelAndView = new ModelAndView();
/* modelAndView.addObject("id","");
modelAndView.addObject("password","");*/
modelAndView.setViewName("redirect:https://www.baidu.com/");
return modelAndView;
}

Spring中Model,ModelMap和ModelAndView的更多相关文章

  1. Spring中Model,ModelMap以及ModelAndView之间的区别

    原文链接:http://blog.csdn.net/zhangxing52077/article/details/75193948 Spring中Model,ModelMap以及ModelAndVie ...

  2. Spring中Model、ModelMap及ModelAndView之间的区别

    Spring中Model.ModelMap及ModelAndView之间的区别   1. Model(org.springframework.ui.Model)Model是一个接口,包含addAttr ...

  3. springMVC Model ModelMap 和 ModelAndView的区别(转)

    原文地址:springMVC Model ModelMap 和 ModelAndView的区别 近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndVie ...

  4. Model/ModelMap 和 ModelAndView 的区别使用

    Model/ModelMap 和 ModelAndView 的区别使用 Model/ModelMap controller: package springmvc.controller; import ...

  5. springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序

    springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...

  6. spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序

    spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...

  7. SpringMVC Map Model ModelMap 和 ModelAndView

    代码: package com.gaussic.controller; import com.gaussic.model.AccountModel; import org.springframewor ...

  8. Spring中Model、ModelMap及ModelAndView之间的区别+传递参数

    org.springframework.ui.Model(接口)传递数据,Spring框架自动创建它的一个实现类,如BindingAwareModelMap org.springframework.u ...

  9. JSP隐含变量和Spring中Model在EL表达式中的读取顺序

    偶然中存在着必然,必然中存在着偶然 偶然出现的bug,必然存是由代码的不合理甚至错误的 代码逻辑越长,越复杂,就越容易出现bug 之前项目里几次偶然出现了一个bug,简单的描述就是第一次新增了之后进行 ...

随机推荐

  1. web自动化测试笔记(一)

    web自动化测试环境配置(JDK) 使用selenium工具做自动化测试之前,首先要做的准备工作是配置一下web自动化测试的环境. 1.下载jdk http://www.oracle.com/tech ...

  2. 2019 西安邀请赛 M

    Problem Description There are n planets ∼n. Each planet is connected to other planets through some t ...

  3. 12 Cookie、Session和JSP基础

    1.会话技术 (1)会话概念:一次会话中包含多次请求和响应.一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 (2)会话功能:在一次会话的范围内的多次请求间,共享数据 (3)会 ...

  4. Python基础系列讲解-自动控制windows桌面

    原链接:https://zhuanlan.zhihu.com/p/73001806 在使用PC时与PC交互的主要途径是看屏幕显示.听声音,点击鼠标和敲键盘等等.在自动化办公的趋势下,繁琐的工作可以让程 ...

  5. LVS(3种模式+10种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...

  6. 48 容器(七)——HashMap底层:哈希表结构与哈希算法

    哈希表结构 哈希表是由数组+链表组成的,首先有一个数组,数组的每一个位置都用来存储一个链表,链表的基本节点为:[hash值,key值,value值,next],当存入一个键值对时,首先调用hashco ...

  7. 使用springboot实现一个简单的restful crud——01、项目简介以及创建项目

    前言 之前一段时间学习了一些springboot的一些基础使用方法和敲了一些例子,是时候写一个简单的crud来将之前学的东西做一个整合了 -- 一个员工列表的增删改查. 使用 restful api ...

  8. javascript, 元素 页面 简单碰撞

     <div>     </div>     <style>         div {             width: 100px;              ...

  9. 使用vue-cookies

    1.在项目中安装vue-cookies: npm install vue-cookies --save 或 yarn add vue-cookies --save 2.全局引用: //在 main.j ...

  10. node+mysql+vue+express项目搭建

    第一步:项目搭建之前首先需要安装node环境和MySQL数据库. 在已经完成上述的条件下开始进行以下操作: npm install @vue/cli -g   (-g 代表全局安装) 初始化项目  v ...