一 參考資料
1 http://jc-dreaming.iteye.com/blog/563893
2 http://www.iteye.com/topic/76043
3 http://xubindehao.iteye.com/blog/754807
4 http://javafenger.iteye.com/blog/96829
5 http://www.kaila.com.cn/space.php?uid=7114&do=blog&id=458578
6 http://blog.csdn.net/zsx923/archive/2010/01/19/5210325.aspx
方法一:工具類
import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import org.apache.commons.beanutils.BeanUtils; public class RequestToBean { /** * ConvertUtilsBean convertUtils = new ConvertUtilsBean(); * DateConverter dateConverter = new DateConverter(); * convertUtils.register(dateConverter,Date.class); * */ /** * @param <T> * @param newSource 現將要設置新值的對象 * @param source 源數據對象 */ public static <T> void beanConvert(T newSource,T source){ try { BeanUtils.copyProperties(newSource,source); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * @param request 請求對象 * @param obj 要設置Bean的類型,傳入試為: Bean.class * @return */ @SuppressWarnings("unchecked") public static <T> T getBeanToRequest(HttpServletRequest request,Class<T> clazz){ //獲取頁面所有的請求參數名稱 Enumeration<String> enume = request.getParameterNames(); T beanObj = getObjectByClass(clazz); try{ while(enume.hasMoreElements()){ //參數名稱 String propertyName = enume.nextElement(); //判斷是否存在此屬性 if(isCheckBeanExitsPropertyName(clazz,propertyName)){ //獲取請求值 Object propertyValue = request.getParameter(propertyName); setProperties(beanObj,propertyName,propertyValue); } } }catch(Exception e){} return beanObj; } private static <T> T getObjectByClass(Class<T> clazz){ T t = null; try { t = clazz.newInstance(); } catch (InstantiationException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } return t; } /** * @param clazz Class對象 * @param propertyName 屬性名稱 * @return true || false 檢查對象中是否存在該屬性名稱 */ private static boolean isCheckBeanExitsPropertyName(Class<?> clazz,String propertyName){ boolean retValue = false; try { Field field = clazz.getDeclaredField(propertyName); if(null != field){ retValue = true; } } catch (NoSuchFieldException e) { Out.println("類: " + clazz.getSimpleName()+",不存在屬性名: "+propertyName+" ,詳細錯誤信息: "+e.getMessage()); } return retValue; } /** * 設置字段值 * @param obj 實例對象 * @param propertyName 屬性名 * @param value 新的字段值 * @return */ public static void setProperties(Object object, String propertyName,Object value) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd = new PropertyDescriptor(propertyName,object.getClass()); Method methodSet = pd.getWriteMethod(); methodSet.invoke(object,value); } }
方法二:
三 使用common beanutils組件
代碼:
User user = new User();
BeanUtils.populate(user,request.getParameterMap());