`

Request To JavaBean(请求对象转换为JavaBean对象)

    博客分类:
  • Java
阅读更多
背景:
经常要从request等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,麻烦 
一 参考资料
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());
分享到:
评论

相关推荐

    JSP期末考试试卷及参考答案

    7、在JSP内置对象中,(request)对象是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息,此对象的(getparameter)方法可以获取客户端表单中某输入框提交的信息。 8、在JSP内置对象中,(response)...

    超级有影响力霸气的Java面试题大全文档

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别?  Java Bean 是可...

    Servelt技术做的E家园

    * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException *...

    java面试题

    答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的进程中运行,为不同的操作系统开发。 xml解析技术? 答:常用的DOM、SAX等 DOM:处理大型文件时性能下降的非常厉害,适合对xml...

    java 面试题 总结

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 20、EJB与JAVA BEAN的区别? Java Bean 是可复用...

    JSP动态网页制作基础培训教程源代码.rar

    5 showParameter.jsp 第5章\ch5 request对象示例(JSP页面) 6 count.jsp 第5章\ch5 计数器示例 7 test.jsp 第5章\ch5 计数器测试示例 8 register.html 第5章\ch5 用户注册系统示例(HTML页面) 9 register.jsp ...

    Servlet与JSP核心编程第2版

    4.7 根据请求参数自动填充java对象:表单bean 4.8 当参数缺失或异常时重新显示输入表单 第5章 客户请求的处理:http请求报头 5.1 请求报头的读取 5.2 制作所有请求报头的表格 5.3 了解http1.1请求报头 5...

    J2EE中文版指南 CHM格式 带全文检索

    为什么要使用JavaBean组件 190 创建并使用JavaBean组件 190 设置JavaBean组件属性 190 返回JavaBean组件属性 191 第13章 在JSP页面中自定义标签 193 什么是自定义标签? 193 JSP页面的例子 193 使用标签 196 声明...

    xmg-gecco-demo-master.zip

    至此页面内容已经被gecco转换为一个普通的javabean。剩下的工作就是将javabean进一步清洗然后针对特定的业务逻辑进行持久化等处理。 一、实现pipeline接口 gecco采用管道过滤器模式灵活的实现业务逻辑处理,首先实现...

    最新Java面试宝典pdf版

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    Java面试笔试资料大全

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    Java面试宝典2012新版

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    JAVA面试宝典2010

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    Java面试宝典-经典

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    Java面试宝典2010版

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    java面试题大全(2012版)

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

    Java面试宝典2012版

    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有...

    java面试宝典2012

    8、Request对象的主要方法: 94 9、forward 和redirect的区别 95 10、request.getAttribute() 和 request.getParameter() 有何区别? 96 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 96 12. jsp有哪些...

Global site tag (gtag.js) - Google Analytics