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
这两个方法来获取用户填写表单的数据的