Request To JavaBean(請求對象轉換為JavaBean對象)


一 參考資料 
http://jc-dreaming.iteye.com/blog/563893 
http://www.iteye.com/topic/76043 
http://xubindehao.iteye.com/blog/754807 
http://javafenger.iteye.com/blog/96829 
http://www.kaila.com.cn/space.php?uid=7114&do=blog&id=458578 
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()); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM