利用反射机制解释struts2中的取值原理
package com.uplooking.test.base.Servlet;
import java.lang.reflect.Method;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javafx.scene.chart.PieChart.Data;
import sun.java2d.pipe.SpanShapeRenderer.Simple;
public class OsServlet extends HttpServlet{
//获取属性并将其转换成set方法的名,以下程序通过此名来获取对象的set方法
public String getMethodName(String methodName){
char firstCharacter=methodName.charAt(0);
char upperCharacter=(char) (firstCharacter-32);
String finalName=“set”+upperCharacter+methodName.substring(1,methodName.length());
return finalName;
}
public Object dyEntityDomain(HttpServletRequest request,String pageEntity) throws InstantiationException,
IllegalAccessException, ClassNotFoundException, NoSuchMethodException, SecurityException,
IllegalArgumentException, InvocationTargetException, ParseException{
//利用反射获取对象的类(此处有三种那个方法)
class.getClass();
Class<?> clz=Class.forName(pageEntity);
//newInstance()来实例化对象
Object curpageobj = clz.newInstance();
//利用反射获取类中的参数及参数的类型等类的信息并将其存在Filed[]数组中
Field[] declaredFields = clz.getDeclaredFields();
for (Field field : declaredFields) {
//定义一个对象存储获取的类中的method
Method method=null;
//遍历类中的属性类型进行匹配
if (field.getType().getSimpleName().equals(“Integer”)) {
//调用getMethodName方法来获取类中的set方法
method=clz.getMethod(getMethodName(field.getName()), Integer.class);
//执行invoke方法来调用对象的set方法并将获取的页面的值赋给对象属性
//方法主动被调用
method.invoke(curpageobj, Integer.parseInt(request.getParameter(field.getName())));
}
//对于不同类型的属性进行赋值
else if(field.getType().getSimpleName().equals(“String”)){
method=clz.getMethod(getMethodName(field.getName()), String.class);
method.invoke(curpageobj, request.getParameter(field.getName()));
}
else if(field.getType().getSimpleName().equals(“Date”)){
System.out.println(“嘿嘿嘿”+getMethodName(field.getName()));
System.out.println( request.getParameter(“1233="+request.getParameter(field.getName())));
//method=clz.getMethod(getMethodName(field.getName()), Data.class);
//method.invoke(curpageobj, new Date(2012-10-8));
}
}
//返回一个对象
return curpageobj;
}
}