java源码修炼(三) getModel()
来源:互联网 发布:mysql 查询加分页 编辑:程序博客网 时间:2024/06/08 20:08
ClientaaaaQuery aaaaQuery = getModel(ClientaaaaQuery.class);
其实这个getModel()方法就是要得到类的实例,这个类ClientaaaQuery中的字段对应页面上的字段。这种方法和SpringMVC得到实体类一样。
贴一段代码:
public <T> T getModel(Class<T> modelClass) { Field[] fields = getAllFields(modelClass); T object; try { object = modelClass.newInstance(); } catch (Exception e) { LOG.error("创建模型类实例失败!!!", e); throw new RuntimeException(e); } String value; StringBuilder pageParam = new StringBuilder(); boolean isQueryModel = ClassUtils.getAllInterfaces(modelClass).contains(IQueryModel.class); Method method; for (Field field : fields) { int modifiers = field.getModifiers(); if (Modifier.isStatic(modifiers) || Modifier.isFinal(modifiers)) { continue; } value = getParameter(field.getName()); if (StringUtil.isEmpty(value)) { if (field.getType() == String.class) { try { method = modelClass.getMethod("get" + firstCharUpper(field.getName())); Object invokeValue = method.invoke(object); if (invokeValue != null) { value = invokeValue.toString(); } } catch (Exception e) { if (field.getType() == Boolean.class || field.getType() == boolean.class) { try { String fieldName = field.getName(); method = modelClass.getMethod("get" + firstCharUpper(fieldName.startsWith("is") ? fieldName.replace("is", "") : fieldName)); Object invokeValue = method.invoke(object); if (invokeValue != null) { value = invokeValue.toString(); } } catch (Exception e1) { LOG.warn(e1.getMessage()); } } else { LOG.warn(e.getMessage()); } } } }// LOG.debug(field.getName() + " --> " + value); if (StringUtil.isNotEmpty(value)) { invokeMethod(modelClass, object, value, field.getName(), field.getType()); } if (isQueryModel) { if (null != field.getAnnotation(PagerParam.class)) { pageParam.append(genPageParam(field.getName(), value)); } } } if (modelClass.getSuperclass() == PageModel.class) { value = getParameter("pager.offset"); invokeMethod(modelClass, object, value, "offset", int.class); if (isQueryModel) { if (StringUtil.isEmpty(value)) { value = "0"; } pageParam.append(genPageParam("pager.offset", value)); invokeMethod(modelClass, object, pageParam.toString(), "param", String.class); } } return object; }
其实就是使用了反射来得到的类以及用户填写的表单的数据
可以认为SpringMVC使用的也是这种方法
SPringMVC用的是HandlerMethodArgumentResolver和HandlerMethodReturnValueHandler
这两个方法来获取用户填写表单的数据的
阅读全文
0 0
- java源码修炼(三) getModel()
- java源码修炼(二) Stack源码分析
- java源码修炼(一) equals和==
- 巩固与修炼(三)
- Java 源码分析(三)
- java修炼笔记(1)
- 程序员思维修炼读书笔记(三)
- python圣斗士修炼(三):运算符
- [JAVA修炼之路三]-JAVA Thread 方法
- java修炼
- java代理(三、动态代理源码)
- Java基础(三)HashMap源码剖析
- java集合源码解析(三)--List
- Java容器(三):LinkedList源码分析
- Java集合源码解析(三)HashMap源码解析
- 程序员修炼之路(六)编写自己的工具(JAVA注册系统级快捷键源码>jintellitype<)
- PHP 修炼【三】
- 程序员修炼“三境界”
- 取出json中[{},{}] 的数据 ,使用 for-in 来循环对象的属性
- GCD 的使用
- linux 压缩文件夹的一部分
- Spring boot 九 集成 FreeMark
- PTA 树的同构
- java源码修炼(三) getModel()
- spring boot的一些配置二
- RAC环境中threads变更后如何确保goldengate继续正常复制
- linux shell 脚本之深入浅出的grep的用法
- php 字符串编码转换
- mysql 采用内嵌视图更新表引起的1205报错
- spring事务的隔离级别
- 第10周项目1(2)-二叉树构造算法的验证
- IllegalStateException: commit already called