利用反射机制来获取表单请求值以及对象赋值

来源:互联网 发布:淘宝怎么样投诉店家 编辑:程序博客网 时间:2024/06/18 05:39

反射上一次博客中就已经详细介绍了反射机制,如果大家有兴趣的话可以看一看 点击打开链接


反射就是java语言的一种内置的机制,通过这个机制可以动态的  创建对象、读写属性、调用方法


一、首先你要先导入两个jar包

commons-beanutils-1.8.0.jar

commons-logging.jar

二、定义自己的工具类

package framework.util;

import java.text.SimpleDateFormat;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.ByteConverter;
import org.apache.commons.beanutils.converters.DoubleConverter;
import org.apache.commons.beanutils.converters.FloatConverter;
import org.apache.commons.beanutils.converters.IntegerConverter;
import org.apache.commons.beanutils.converters.LongConverter;
import org.apache.commons.beanutils.converters.ShortConverter;
/**
 * 工具类(第三方插件)
 * @author king
 *
 */
public class MyBeanUtils {

static{//用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块
//找到相对应的转换器,默认值为null
FloatConverter floatConverter=new FloatConverter(null);
IntegerConverter integerConverter=new IntegerConverter();
ByteConverter byteConverter=new ByteConverter(null);
ShortConverter shortConverter=new ShortConverter(null);
DoubleConverter doubleConverter=new DoubleConverter(null);
LongConverter longConverter=new LongConverter(null);

//通过反射机制,进行转换
ConvertUtils.register(floatConverter, Float.class);
ConvertUtils.register(integerConverter, Integer.class);
ConvertUtils.register(byteConverter, Byte.class);
ConvertUtils.register(shortConverter, Short.class);
ConvertUtils.register(doubleConverter, Double.class);
ConvertUtils.register(longConverter, Long.class);

//处理Java.sql.Date的格式和空
ConvertUtils.register(new Converter() {
private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
public Object convert(Class arg0, Object value) {
// TODO Auto-generated method stub
try {
if(null==value||"".equals(value.toString().trim())){
return null;
}
String s=value.toString().trim();
java.util.Date d=sdf.parse(s);
java.sql.Date dd=new java.sql.Date(d.getTime());
return dd;
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException("日期格式错误,正确的格式为:yyyy-MM-dd");
}
}
} ,java.sql.Date.class);
}
//无参的构造方法
private MyBeanUtils(){

}
public static void populate(Object bean,Map  properties){
try {
BeanUtils.populate(bean,properties);
} catch (Exception e) {
e.printStackTrace();
}
}
}



三、在servlet类的dopost里面获取所有的参数一个map集合 

然后调用上面那个工具类的方法就可以了

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//实例化对象
User u=new User();

//获取所有的请求参数(表单)
Map<String,String[]> map = request.getParameterMap();

//调用方法
MyBeanUtils.populate(u, map);

}


小结:大家有没有发现减少了很多代码量的操作,这里采用的就是反射机制的原理


---------------------------------------微笑敬请期待下一节哦!

阅读全文
0 0
原创粉丝点击