} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获得sd2对象中的值
System.out.println(sd2.getDevName());
System.out.println(sd2.getDevId());
System.out.println(sd2.getAge());
test.testArg();
}
}
利用反射实现对输入框获取到的值进行输出
FormToDtoUtil.java
| FormToDtoUtil.java |
| package com.ibm.util;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
public class FormToDtoUtil {
/** * 将request对象中的值传递到DTO对象中 * @param request 请求对象 * @param to 赋值对象 * @throws NoSuchFieldException * @throws SecurityException * @throws NoSuchMethodException * @throws ParseException * @throws InvocationTargetException * @throws IllegalAccessException * @throws IllegalArgumentException */
public void load(HttpServletRequest request ,Object to) throws SecurityException, NoSuchFieldException, NoSuchMethodException, ParseException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
//getPatameterNames表示获得表单中控件的名称集合 //枚举对象和迭代性质一样 Enumeration enumera=request.getParameterNames(); //获得to对象的类实例 Class toCls=to.getClass();
while (enumera.hasMoreElements()) { String elem = (String) enumera.nextElement(); System.out.println("控件名是:"+elem); String[] value=request.getParameterValues(elem);
if(value!=null){ //获得属性类型 Class type=toCls.getDeclaredField(elem).getType(); //获得属性对应的set方法 因为控件名是和dto中的属性是一致的,所以可以直接使用控件名来代替属性名 String setMethodName="set"+elem.substring(0,1).toUpperCase()+elem.substring(1); System.out.println("set的名字是:"+setMethodName); //根据方法名称找到set方法 Method method=toCls.getDeclaredMethod(setMethodName, type);
Object[] obj=objectConvert(value, type);
//如果遇到数组类型 if(type.isArray()){ //遇到的类型是数组类型 则直接将数组赋值给to对象 method.invoke(to, new Object[]{obj}); }else{ //非数组类型则 按照数组索引格式取出值,然后赋值即可 method.invoke(to, new Object[]{obj[0]}); }
} }
}
/** * 数据转换方法因为dto中的属性类型不确定,只能针对所有需要的类型进行判断才能返回 * 所需要的类型 * @param value 表单中所获取的值 * @param FieldType DTO中字段的类型 * @return返回对象默认以对象数组的格式返回 * @throws ParseException */
public static Object[] objectConvert(String[] value,Class FieldType) throws ParseException{
Object[] obj=new Object[value.length];
if(FieldType==Integer.class||FieldType==int.class){ obj[0]=Integer.parseInt(value[0]); }elseif(FieldType==Date.class){ SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd"); obj[0]=format.parse(value[0]); }else{ obj=value; } return obj; }
}
|
RegAction.java
| RegAction.java |
| package com.ibm.action;
import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.Normalizer.Form; import java.util.Enumeration;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import com.ibm.dto.SoftDevoloper; import com.ibm.util.FormToDtoUtil;
public class RegAction extends HttpServlet {
/** * Constructor of the object. */ public RegAction() { super |