Spring中Model,ModelMap和ModelAndView
目录
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的更多相关文章
- Spring中Model,ModelMap以及ModelAndView之间的区别
原文链接:http://blog.csdn.net/zhangxing52077/article/details/75193948 Spring中Model,ModelMap以及ModelAndVie ...
- Spring中Model、ModelMap及ModelAndView之间的区别
Spring中Model.ModelMap及ModelAndView之间的区别 1. Model(org.springframework.ui.Model)Model是一个接口,包含addAttr ...
- springMVC Model ModelMap 和 ModelAndView的区别(转)
原文地址:springMVC Model ModelMap 和 ModelAndView的区别 近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndVie ...
- Model/ModelMap 和 ModelAndView 的区别使用
Model/ModelMap 和 ModelAndView 的区别使用 Model/ModelMap controller: package springmvc.controller; import ...
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...
- SpringMVC Map Model ModelMap 和 ModelAndView
代码: package com.gaussic.controller; import com.gaussic.model.AccountModel; import org.springframewor ...
- Spring中Model、ModelMap及ModelAndView之间的区别+传递参数
org.springframework.ui.Model(接口)传递数据,Spring框架自动创建它的一个实现类,如BindingAwareModelMap org.springframework.u ...
- JSP隐含变量和Spring中Model在EL表达式中的读取顺序
偶然中存在着必然,必然中存在着偶然 偶然出现的bug,必然存是由代码的不合理甚至错误的 代码逻辑越长,越复杂,就越容易出现bug 之前项目里几次偶然出现了一个bug,简单的描述就是第一次新增了之后进行 ...
随机推荐
- Mysql中TO_DAYS函数
原文地址:https://blog.csdn.net/sinat_19569023/article/details/50417273 SQL博大精深 TO_DAYS函数 返回一个天数! 啊哈?什么天数 ...
- Linq调试实时输出信息扩展方法(摘抄)
原文在此 [译]如何在C#中调试LINQ查询 原linq语句: var res = employees .Where(e => e.Gender == "Male") .Ta ...
- JAVA代码:生成一个集合,自定义大小,100以内的随机整数
JAVA代码:生成一个集合,自定义大小,100以内的随机整数 方法一:(Random类) package com.dawa.test; import java.util.ArrayList; impo ...
- scrapy爬虫,cmd中执行日志中显示了爬取的内容,但是运行时隐藏日志后(运行命令后添加--nolog),就没有输出结果了
cmd下执行scrapy爬虫程序,不报错也没有输出,解决方案 想要执行parse能够在cmd看到parse函数的执行结果: 解决方法: settings.py 中设置 ROBOTSTXT_OBEY ...
- springboot2 配置 https
package cn.xiaojf.aibus.configure; import org.apache.catalina.Context; import org.apache.catalina.co ...
- [转帖]DCEP究竟是什么?
DCEP究竟是什么? https://www.cnblogs.com/kaixin2018/p/11795534.html DCEP (Digital Currency Electronic Paym ...
- JAVAWEB实现增删查改(图书信息管理)之添加功能实现
addBooks.jsp页面代码:↓ <%-- Created by IntelliJ IDEA. User: NFS Date: 2019-7-12 Time: 14:30 To change ...
- pycharm爬取网页数据
1 python环境的配置 1.1 安装python文件包,放到可以找到的位置 1.2 右键计算机->属性->高级环境设置->系统变量->Path->编辑->复制p ...
- Python开发之规范化目录
13.规范化目录 规范目录优点: 可读性高 加载快 查询修改简 规范化目录结构 (1) start.py文件:首要配置启动文件,运行run()就可以执行项目 #start import sys imp ...
- python网课自动刷课程序-------selenium+chromedriver
python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便. 现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上 ...