springmvc为请求处理器的目标参数赋值的过程
来源:互联网 发布:linux的隐藏文件 编辑:程序博客网 时间:2024/06/05 07:03
↓在invokeHandlerMethod()方法中调用resolveHandlerArguments()方法↓
Object[] args = resolveHandlerArguments(handlerMethodToInvoke, handler, webRequest, implicitModel);
↓在resolveHandlerArguments()方法中↓
1. 创建 WebDataBinder 对象
WebDataBinder binder = resolveModelAttribute(attrName, methodParam, implicitModel, webRequest, handler);
↓进入resolveModelAttribute()方法↓
(1). 确定 objectName 属性: 若传入的 attrName 属性值为 “”, 则 objectName 为类名第一个字母小写
注意: attrName. 若目标方法的 POJO 属性使用了 @ModelAttribute 来修饰, 则 attrName 值即为 @ModelAttribute的 value 属性值
// Bind request parameter onto object...String name = attrName;if ("".equals(name)) { name = Conventions.getVariableNameForParameter(methodParam);}
(2). 确定 target 属性
1> 在 implicitModel 中查找 attrName 对应的属性值. 若存在, ok
Object bindObject;if (implicitModel.containsKey(name)) { bindObject = implicitModel.get(name);}
2> 若不存在: 则验证当前 Handler 是否使用了 @SessionAttributes 进行修饰, 若使用了, 则尝试从 Session 中获取 attrName 所对应的属性值. 若 session 中没有对应的属性值, 则抛出了异常.
else if (this.methodResolver.isSessionAttribute(name, paramType)) { bindObject = this.sessionAttributeStore.retrieveAttribute(webRequest, name); if (bindObject == null) { raiseSessionRequiredException("Session attribute '" + name + "' required - not found in session"); }}
3> 若 Handler 没有使用 @SessionAttributes 进行修饰, 或 @SessionAttributes 中没有使用 value 值指定的 key和 attrName 相匹配, 则通过反射创建了 POJO 对象
else { bindObject = BeanUtils.instantiateClass(paramType);}
(3). 创建WebDataBinder 对象
WebDataBinder binder = createBinder(webRequest, bindObject, name);
返回一个WebDataBinder 对象
initBinder(handler, name, binder, webRequest);return binder;
↓返回到resolveHandlerArguments()方法中↓
2. SpringMVC 把表单的请求参数赋给了 WebDataBinder 的 target 对应的属性
if (binder.getTarget() != null) { doBind(binder, webRequest, validate, validationHints, !assignBindingResult);}
3.从WebDataBinder中取出target
args[i] = binder.getTarget();
4. SpringMVC 会把 WebDataBinder 的 attrName 和 target 给到 implicitModel,进而传到 request 域对象中
implicitModel.putAll(binder.getBindingResult().getModel());
↓返回到invokeHandlerMethod()方法中↓
5. 把 WebDataBinder 的 target 即resolveHandlerArguments()方法返回的参数args传递给目标方法的入参
Object[] args = resolveHandlerArguments(handlerMethodToInvoke, handler, webRequest, implicitModel);handlerMethodToInvoke.invoke(handler, args);
阅读全文
0 0
- springmvc为请求处理器的目标参数赋值的过程
- SpringMVC之分析HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程(一)
- SpringMVC之分析HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程(二)
- SpringMVC中HandlerMethod的请求参数解析过程
- SpringMVC请求参数的获取
- springMVC的处理器配置
- springmvc接收请求参数的方法
- springmvc之select原生的请求参数
- SpringMVC获取请求参数的常用注解
- springMVC 请求参数的乱码解决
- 《SpringMvc》----请求参数的绑定1
- SpringMVC获取请求参数的方法
- springMVC 获取请求参数的方法
- SpringMVC请求参数获取的方法
- springMVC的请求参数乱码问题
- SpringMVC 对请求参数的设置
- SpringMVC 处理客户端请求的过程
- SpringMVC中一个请求的经历过程
- epoll和select
- linux使用msgpack及测试
- java 判断二维数组是否为空
- Java中的修饰符区别(public,private,protected,default, final)
- POJ 3695 Rectangles 笔记
- springmvc为请求处理器的目标参数赋值的过程
- 用线性表实现约瑟夫环(java版)
- DLX模板之精确覆盖和重复覆盖
- 探究tomcat7源码的connector
- POJ3621 Sightseeing Cows 最短路求最优比率生成环
- 按键精灵之复制文本到播放器中-yellowcong
- ios-UILabel的自动换行
- ios UIWebView捏合放大缩小的实现
- 午后心情