http://www.cnblogs.com/ldcsaa/archive/2012/02/16/2353030.html Java POJO Bean 对象与 Web Form 表单的自动装配(转)
http://blog.163.com/shygiant@126/blog/static/106671352007101954818234/
如果表单元素的名称和 Form Bean 属性名不一致则使用 keyMap 进行映射
1、先进行表单元素名和Bean属性的映射
2、通过配置文件来校验,在初始化时先读到bean里面来
3、提供一组校验函数(正则匹配和一部分常用的类型整型,正整型,short, char, byte, long, double, 并提供最大,最小限制,默认值, 字符串,只判断最长值及最小值,默认值,date, time,datetime, HH:mm等)
4、更进一步的封装:校验并转为指定类型赋值
5、校验并转为指定类型,并保存到hashMap<String, Object>
6、校验并转为一上Object (HashMap转为Object)
一、先将httpRequest中的参数全部读出,并保存到HashMap<String, String>中。这个似乎可以直接用ServletRequest.getParameterMap函数。但考虑到我们需要兼容上传参数名与bean不一致的情况,所以自己封装,允许设置name的转换
static Map getParameterMap(ServletRequest request, HashMap<String, String> nameMap) {
if (nameMap == null || nameMap.size() == 0) {
return request.getParameterMap();
}
//
}
二、效验规则信息类
class CheckRule
// 检验类型的枚举
// 支持从一个字符串转为这个
CheckRule(String strRule);
SetRule(String strRule);
// 支持从HashMap<String, String>转为一个HasmMap<String, CheckRule>
二、单个值的有效性判断(不抛异常,不返回错误提示)
ParamChecker, 提供一些错误判断函数
Boolean check(String param, CheckRule rule);
三、单个值的有效性判断并转为指定的基本类型并进行赋值,提供值不存在或异常时赋予默认值的函数,错误提示信息等,检验失败会抛出校验失败的异常
四、String转为基本类型
public static Map testReflect(Object obj) {
Map hashMap = new HashMap();
try {
Class c = obj.getClass();
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
if (m[i].getName().indexOf("get")==0) {
//System.out.println("方法名:"+m[i].getName());
// System.out.println("值:"+ m[i].invoke(obj, new Object[0]));
hashMap.put(m[i].getName(), m[i].invoke(obj, new Object[0]));
}
}
} catch (Throwable e) {
System.err.println(e);
}
return hashMap;
}
MVC 验证框架的几个不足
1、一个controller只能有一个valitor,需要注册这个valitor及initBinder
2、转化与验证是分开的
3、验证没有针对某一个单独的参数
4、没有可以进行参数名映射的