java 从零开始,学习笔记之基础入门<反射>(二十九)(三)

2014-11-24 08:14:31 · 作者: · 浏览: 5
kTrace();

} 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