博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC---处理模型数据方法 *
阅读量:6443 次
发布时间:2019-06-23

本文共 4739 字,大约阅读时间需要 15 分钟。

承接一二章

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
Hello WorldModelAndView
map
name
name

test.java

package com.hdxy.domian;import java.util.Arrays;import java.util.Date;import java.util.Map;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.hdxy.pojo.User;@RequestMapping("springMVC")@Controllerpublic class Test {  /*处理模型数据方法:   * @1 ModelAndView(可以包含视图和模型信息)   *     处理方法返回值类型为ModelAndView时:方法体即可通过该对象添加模型数据   * @2Map 及 Model   *     入参为:org.springframework.ui.Model,org.springframework.ui.ModelMap   *     或者java.ui.Map时处理方法返回时,Map中的数据会自动添加到模型中。   * @3 SessionAttributes:   *    将模型中的某个属性暂存在HttpSession中以便多个请求之间可以共享这个参数   * @4 ModelAttribute:    *    方法入参标注该注解后,入参的对象就会放入到数据模型中   *  SpringMVC确定目标方法POJO类型入参的过程:   *    1.确定一个Key   *      1)。若目标方法的POJO类型的参数没有使用@ModeleAttriBute 作为修饰 则key额为POJO类名第一个字母小写   *      2)。若使用了@MOdelAttribute来修饰,则key为@ModeleAttriBute注解的value属性值   *    2.在implicitModel中查找key对应的对象,若存在,则作为入参传入   *      1)。若在@ModelAttribute标记的方法中在Map中保存过,且key和1确定的key一至,则获取到   *    3.若implicitModel中不存在key对应的对象,则检查当前handler是佛使用sessionAttrbute注解修饰   *    若使用了该注解,则@sessionAttributes注解的value属性值中包含了key,则会从Httpsession中来获取key   *    所对应额value值,若存在则直接传入目标参数方法中,若不存在则抛出异常   *    4.若handler没有标识@sessionAttributes注解或@sessionAttributes注解的value值中不包含key,则   *    会通过反射来创建pojo类型的参数,传入目标方法的参数   *    5.SpringMVC会把key和value保存到implicitModel中,进而会保存到request中   *        * */   final public String SUCCESS="loginSuccess";     @RequestMapping(value="/ModelAndView")   public ModelAndView TestModelAndView(){      String viewName= SUCCESS;      ModelAndView modelv=new ModelAndView(viewName);      modelv.addObject("time",new Date());    return modelv;   }      @RequestMapping("/Map")   public String TestMap(Map
map){ /*System.out.println(map.getClass().getName());//测试ModelMap*/ map.put("names", Arrays.asList("tom","jerry","2")); return SUCCESS; } @RequestMapping("/testModelAttribute") public String testModelAttribute(User user){ //此方法从新new了一个User类 去赋修改后的值 得到的密码为空。(无法满足不修改密码的需求) //(test2.java)而ModelAttribute是从数据库获取User类(把修改的属性赋值,无修改的显示原先值) 然后赋值 System.out.println("修改"+user); return SUCCESS; }}

test2.java

package com.hdxy.domian;import java.util.Map;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import com.hdxy.pojo.User;@RequestMapping("/springMVC1")@Controllerpublic class Test2 {    final public String SUCCESS="loginSuccess";    @ModelAttribute    public void getUser(@RequestParam(value="id",required=false)Integer id,            Map
map){ if(id !=null){ //模拟从数据库中获取对象 User user=new User(); user.setId(1); user.setUsername("tom"); user.setPassword("123456"); System.out.println("从数据库中获取user"+user); /*map.put("adc", user);*/ map.put("user", user); } }/** * 运行流程 * 1.执行:@ModelAttribute注解修饰的方法:从数据库中取出对象,放入到Map中 键值为: user * 2.springMVC从Map中取出user对象,并把表单的请求参数赋值给user对象对应属性 * 3.SpringMVc把上述对象传入目标方法的参数中 * * 注: 在@ModelAttribute注解修饰的方法中,(只能修饰类) * 放入到Map时的键值 需要和 目标方法入参类型的第一个字母小写的字符串一致 * * Parma("abc")User user * */ @RequestMapping("/testModelAttribute") public String testModelAttribute(User user){ System.out.println("测试SpringMVC1"); System.out.println("修改"+user); return SUCCESS; } /** *源码分析: *1.调用@ModelAttribute注解修饰的方法,实际上把ModelAttribute方法中的Map中的数据放在implicitModel中 *2.解析请求处理器的目标参数来自于webDataBinder 对象的target属性 *1).创建webdatabinder对象: *--确定ObjectName属性(若传入的attrname属性值为:“”,则objectName为类名的第一个字母小写)。 *注意:attrName 若目标犯法的pojo属性使用了ModelAttribute 来修饰,则attrname 值为ModelAttribute的value属性值 *---确定target属性: * 在implicitModel中查找attrName对应的属性值,如果存在,Ok * >若不存在:则验证当前handel石佛使用了@sessionAttributes进行修饰,若使用了,则尝试从session中获取attrName所对应的属性值 * 若session没有则抛出异常 * >若handle没有使用@sessionAttributes 进行修饰,或@sessionAttributtes中没有使用value 值指定的key和attrName 相匹配,则通过反射创建POJO类 * 2), SpringMVC把表单的请求赋给了webdataBinder的target对应的属性 * 3),springMVC会把webDataBinder的target和attrname给implicitModel * 4),把webDataBinder的target作为参数传递给目标方法的入参 **/}

 

转载于:https://www.cnblogs.com/lnthz/p/8168834.html

你可能感兴趣的文章
小tip:纯CSS让overflow:auto页面滚动条出现时不跳动
查看>>
Linq Like
查看>>
Linux知识积累(4) Linux下chkconfig命令详解
查看>>
centos关机与重启命令
查看>>
[Eth]Mac/Phy/mdio/Rgmii
查看>>
C++中的函数指针和函数对象总结
查看>>
ELK学习总结(3-2)elk的过滤查询
查看>>
快速定位oracle故障-恩墨
查看>>
Redis可视化工具 Redis Desktop Manager
查看>>
Go基础系列:为select设置超时时间
查看>>
Android网络请求之OkHttp框架
查看>>
《Apache Kafka实战》读书笔记-调优Kafka集群
查看>>
小程序开发事项
查看>>
福利 | 2018各大技术大会资料汇总(可下载)
查看>>
寻找下一代CTO - 激发潜能把握成功!!
查看>>
用DELPHI 开发压缩、解压、自解压、加密
查看>>
Linux命令行得到系统IP
查看>>
SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>
查看>>
python类型转换、数值操作(收藏)
查看>>
mysql delimiter
查看>>