【SpringMVC】ModelAndView
来源:互联网 发布:网站域名分类 编辑:程序博客网 时间:2024/06/06 00:24
5.1ModelAndView
处理方法返回值类型为ModelAndView时,方法体即可通过对象添加模型数据
jsp:
<!-- 测试testModelAndView -->
<ahref="springmvc/testModelAndView">Test ModelAndView</a>
控制器:
/**
* 目标方法的返回值可以是ModelAndView,包含视图和模型信息
* springmvc会把modelandview中model数据放入到request域对象中
* @return
*/
@RequestMapping("/testModelAndView")
publicModelAndView testModelAndView(){
String viewName=SUCCESS;
ModelAndView modelAndView=new ModelAndView(viewName);
// 添加模型数据到ModelAndView中
modelAndView.addObject("time",new Date());
returnmodelAndView;
}
success.jsp:
time:${requestScope.time}
结果:
5.2Map及Model
入参为org.springframework.ui.Model/org.springframework.ui.ModelMap或java.uti.Map时,处理方法返回时,Map中的数据会自动添加到模型中
jsp:
<!-- 测试testMap -->
<ahref="springmvc/testMap">Test Map</a>
控制器:
@RequestMapping("/testMap")
publicString testMap(Map<String, Object>map){
map.put("names",Arrays.asList("Tom","Jerry","Mike"));
returnSUCCESS;
}
success.jsp:
names:${requestScope.names}
结果:
5.3@SessionAttributes
将模型中某个属性暂存到HttpSession中,以便多个请求间可以共享这个属性
jsp:
<!-- 测试testSessionAttributes -->
<ahref="springmvc/testSessionAttributes">Test SessionAttributes</a>
控制器:
@SessionAttributes("user") //在类上添加注解后,当向请求域中存放数据时,也在Session域中存放一份数据
@RequestMapping("/springmvc")
@Controller
publicclass SpringMVCTest {
privatestaticfinal StringSUCCESS="success";
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Map<String, Object>map){
User user=new User("Tom","123","tom@163.com", 12);
map.put("user",user);//向请求域中放入数据
returnSUCCESS;
}
}
success.jsp:
<!-- 匹配value指定对象 -->
request user:${requestScope.user}
<br><br>
session user:${sessionScope.user}
结果:
jsp:
<!-- 测试testSessionAttributes -->
<ahref="springmvc/testSessionAttributes">Test SessionAttributes</a>
控制器:
success.jsp
<!-- 匹配types指定对象 -->
request school:${requestScope.school}
<br><br>
session school:${sessionScope.school}
运行结果:
SessionAttribute除了放置可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定那些模型属性放到会话中。
注意:该注解只能放在类上
5.4@ModelAttribute
方法入参标注该注解后,入参的对象就会放到数据模型中
5.4.1应用场景
数据库中数据更新问题
jsp:
<!--
模拟修改操作:
1.原始数据为:1,tom,123456,tom@163.com,13
2.密码不能被修改
3.表单回显,模拟操作直接在表单填写对应的属性值
-->
<formaction="springmvc/testModelAttribute"method="post">
<inputtype="hidden"name="id"value="1"/>
username:<inputtype="text"name="username"value="Tom"/>
<br>
email:<inputtype="text"name="email"value="tom@163.com">
<br>
age:<inputtype="text"name="age"value="13">
<br>
<inputtype="submit" value="submit">
</form>
控制器:
/**
* 被@ModelAttribute修饰额方法,会在每个目标方法执行之前被SpringMVC调用
* @param id
* @param map
*/
@ModelAttribute
publicvoid getUser(@RequestParam(value="id",required=false) Integerid,Map<String, Object>map){
if (id!=null) {
//模拟从数据库中获取对象
User user=new User(1, "Tom", "123456", "tom@163.com",13);
System.out.println("从数据库中获取一个对象:"+user);
map.put("user", user);
}
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(Useruser){
System.out.println("修改:"+user);
returnSUCCESS;
}
5.4.2运行原理
/**
* 运行流程:
* 1.执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放到了Map中,键为:user
* 2.SpringMVC从Map中取出User对象,并把表单的请求参数赋给该User对象的对应属性
* 3.SpringMVC把上述对象传入目标方法的参数
*
* 注意:在@ModelAttribute修饰的方法中放入到Map时的键要和目标方法入参类型的第一个字母小写的字符串一致
*/
5.4.3源码分析
省了。。。。
5.4.4确定目标方法POJO类型参数
/**
* SpringMVC确定目标方法POJO类型参数入参过程
* 1.确定一个key
* (1)若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,则key为pojo类名的第一个字母的小写
* (2)若使用了@ModelAttribute来修饰,则key为@ModelAttribute注释的value属性值
* 2.在implicitModel中查找key对应的对象,若存在,则作为参数传入
* (1)若在@ModelAttribute标记的方法中在Map中保存过,且key和1确定的key一致,则会获取到
* 3.若implicitModel中不存在key对应的对象,则检查当前的Handler是否使用@SessionAttribute注释修饰,若使用了该注解,
* 且@SessionAttribute注释的value属性值中包含了key,则会从HttpSession中来获取key所对应的value值,若存在则直接传入到目标
* 方法的入参中,若不存在将抛出异常
* 4.若Handler没有标识@SessionAttribute注释或@SessionAttribute注释的value值不包含key,则通过反射来创建Pojo类型的参数,
* 传入为目标犯法的参数
* 5.SpringMVC会把key和Pojo类型的对象保存到implicitModel中,进而会保存到request中
*/
- springMVC ModelAndView
- 【SpringMVC】ModelAndView
- springMvc ModelAndView
- springmvc modelandview
- SpringMVC ModelAndView跳转失效
- springMVC 的modelandView
- SpringMVC返回ModelAndView
- ModelAndView + springMVC form:form
- springmvc ModelAndView 跳转失灵
- springMVC 的 ModelAndView 用法
- SpringMVC(四)ModelAndView
- springmvc ModelAndView传值
- SpringMVC的ModelAndView传值
- springMVC modelAndView初级应用
- SpringMVC 返回ModelAndView对象
- SpringMVC框架中的ModelAndView
- SpringMVC学习(二)--ModelAndView对象
- springMVC--ModelAndView Map对象详解
- nodejs个人学习笔记
- JS函数之多组图片切换
- 小程序form表单
- 带进度条的x5WebView
- spring cloud: Hystrix断路器(熔断器)
- 【SpringMVC】ModelAndView
- MATLAB学习笔记 表示与描述
- 1236: 最小公倍数
- 线程面试问题
- Multicolored Cars
- 看DeepMind如何用Reinforcement learning玩游戏
- Android Bitmap压缩策略
- linux下目录的作用
- android 动态调试 遇到的问题