本人第一次发表文章,如果有不对的地方,还请多多指教......
我们大家在servlet中写接收前台的参数时,总是一遍又一遍的写request.getParameter(" "),很是麻烦,本篇文章就是为了解决这个问题而来的。但是要求表单中所有控件name属性的值要和类中属性的值一样,如果不一样,那这个方法就不能用了。还有一个类(1)中的属性如果有其他的类(2),那么获取这个类(2)的属性也是不能用这个方法的,例如:
在Student类里面有一个年级Grade的类,获取Grade类的属性就不能用这个方法
private int stuNo;
private String stuName;
private Grade grade;
private int age;
下面是关于这个方法的具体代码:
package com.sms.util;
import java.lang.reflect.Field;import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
public class RequestUtils {
public static <T> T parseRequest(HttpServletRequest request, Class<T> clazz) {
try {
T t = clazz.newInstance();// 进行实例化
Field[] field = clazz.getFields();// 获取这个类所有的属性
for (Field f : field) {
f.setAccessible(true);// 暴力去除private访问的限制
// request.getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button),返回一个Enumeration类型的枚举
Enumeration<String> keys = request.getParameterNames();
// 通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.
while (keys.hasMoreElements()) {
String inputName = keys.nextElement();// inputName的值是form表单中所有控件中的name属性的值
// 如果form表单中所有控件中name属性的值和类中属性的名字相同
if (inputName.equals(f.getName())) {// f.getName()是指属性的名字
f.set(t, request.getParameter(inputName));}
}
}
return t;
} catch (Exception e) {
throw new RuntimeException(e);}
}
}