在编程中总要对bean操作,就免不了要封装bean了
private 私有变量 get set 方法。。
在web操作,总要做 String name=request.getParameter("name") ,
User user=new User();
user.setUserName(name);
比如还有很多属性,就很麻烦
现在很多框架也提供了formbean的功能
昨天在给同学写简单的系统没有框架的时候。。就很不爽了。写了好多。。
后来忍不下去了。就写了一个自动装载的uti类
使用方法必须要 html里的表单项目的名称要和bean的名称一样
UserVo 类
public class UserVo implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
servlet
部分代码
比如我们就从页面封装user类
UserVo user=new UserVo();
//封装user true 就是打印出参数
ServletUtils.getValuesByRequest(request,user,true);
System.out.println(user.getUserName());
System.out.println(user.getPassword());
测试就直接输入url拉。。哈哈。没有页面
servlet?userName=abc&password=def
上边就有值了。
还可以把指定的属性不赋值 , 就不会给User对象的 userName赋值
ServletUtils.getValuesByRequest(request,user,true,new String[]{"userName"});
如果html里的name和类的的属性不一样怎么把。。。添加一个map映射
Map<String,String> map=new HashMap<String,String>();
map.put("user","userName");
ServletUtils.getValuesByRequest(request,user,true,null,map);
url变成这样
servlet?user=abc&password=def
看线ServletUtils类把
public class ServletUtils {
final static String preffix = "set";
static StringBuffer sb = new StringBuffer();
/**
*
* @author Xi@m MiNg 修改备注:
* 把request中的值赋给Object对象,也就是把request中的parameter和object属性对应的时候
* 把object中的属性赋值,使用标准的bean
* @param requestObject
* @param target 目标bean
* @param showDebug 在控制台打印参数
* @return 封装之后的bean
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Object getValuesByRequest(HttpServletRequest hsr,
Object target, boolean showDebug) throws Exception {
Enumeration<String> keys = hsr.getParameterNames();
Map<String, String> valueMap = getValuesMap(hsr, keys);
getObject(valueMap, target, null,null);
// debug show
if (showDebug) {
showDebug(valueMap);
sb = new StringBuffer();
}
return target;
}
/**
*
* @author Xi@m MiNg
* @see 把request中的值赋给Object对象,也就是把request中的parameter和object属性对应的时候
* 把object中的属性赋值,使用标准的bean
* @param requestObject
* @param target 目标bean
* @param unSetProperties 不复制的对象
* @param showDebug 在控制台打印参数
* @return 封装之后的bean
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Object getValuesByRequest(HttpServletRequest hsr,
Object object, boolean showDebug, String[] unSetProperties)
throws Exception {
Enumeration<String> keys = hsr.getParameterNames();
Map<String, String> valueMap = getValuesMap(hsr, keys);
getObject(valueMap, object, unSetProperties,null);
// debug
if (showDebug) {
showDebug(valueMap);
sb = new StringBuffer();
}
return object;
}
/**
*
* @author Xi@m MiNg
* @see 把request中的值赋给Object对象,也就是把request中的parameter和object属性对应的时候
* 把object中的属性赋值,使用标准的bean
* @param requestObject
* @param target 目标bean
* @param unSetProperties 不复制的对象
* @param showDebug 在控制台打印参数
* @return 封装之后的bean
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Object getValuesByRequest(HttpServletRequest hsr,
Object object, boolean showDebug, String[] unSetProperties,Map<String,String> proertiesMap)
throws Exception {
Enumeration<String> keys = hsr.getParameterNames();
Map<String, String> valueMap = getValuesMap(hsr, keys);
getObject(valueMap, object, unSetProperties,proertiesMap);
// debug
if (showDebug) {
showDebug(valueMap);
sb = new StringBuffer();
}
return object;
}
protected static Map<String, String> getValuesMap(
HttpServletRequest hsr, Enumeration<String> keys) throws Exception {
if (keys == null)
return null;
Map<String, String> value = new HashMap<String, String>();
while (keys.hasMoreElements()) {
String element = keys.nextElement();
value.put(element, hsr.getParameter(element));
}
return value;
}
protected static Object getObject(Map<String, String> valueMap,
Object object, String[] unSetProperties,Map<String,String> proertiesMap) throws Exception {
List<String> unSet = null;
if (unSetProperties != null)
unSet=java.util.Arrays.asList(unSetProperties);
if (valueMap == null)
return null;
for (Iterator<String> iter=valueMap.keySet().iterator();iter.hasNext();) {
String key = iter.next();
if (unSet != null && unSet.contains(key)) {
continue;
}
String methodValue = valueMap.get(key);
if(proertiesMap!=null && proertiesMap.containsKey(key)){
key=proertiesMap.get(key);
}
if (methodValue != null)
setValue(object, key, methodValue);
}
return object;
}
protected static void setValue(Object obj, String name, String value)
throws Exception {
Field field = null;
try {
field = obj.getClass().getDeclaredField(name);
} catch (Exception e) {
return;
}
if (field == null) {
return;
}
Method method = obj.getClass().getDeclaredMethod(
getSetMethodName(name), field.getType());
method.invoke(obj, value);
sb.append(name).append(" - ");
}
protected static String getSetMethodName(String methodName) {
String first = methodName.substring(0, 1);
String suffex = methodName.substring(1);
return (preffix + first.toUpperCase() + suffex).toString();
}
public static void showDebug(Map<String, String> valueMap) {
for (Iterator<String> iter=valueMap.keySet().iterator();iter.hasNext();) {
String key = iter.next();
System.out.println("paramterName : " + key + " value: "
+ valueMap.get(key));
}
System.out.println("theSetValueProperties: " + sb.toString());
}
}