你的位置:首页 > 软件开发 > Java > 深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配

深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配

发布时间:2012-02-16 17:01:11
时下很多 Web 框架 都实现了 Form 表单域与 Java 对象属性的自动装配功能,该功能确实非常有用,试想如果没这功能则势必到处冲积着 request.getParameter() 系列方法与类型转换方法的调用。重复代码量大,容易出错,同时又不美观,影响市容。  现在的问题是,这些框架通过什么方法实现自动装配的?如果不用这些框架我们自己如何去实现呢?尤其对于那些纯 JSP/Servlet 应 ...

深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配

  时下很多 Web 框架 都实现了 Form 表单域与 Java 对象属性的自动装配功能,该功能确实非常有用,试想如果没这功能则势必到处冲积着 request.getParameter() 系列方法与类型转换方法的调用。重复代码量大,容易出错,同时又不美观,影响市容。

  现在的问题是,这些框架通过什么方法实现自动装配的?如果不用这些框架我们自己如何去实现呢?尤其对于那些纯 JSP/Servlet 应用,要是拥有自动装配功能该多好啊!本座深知各位之期盼,决定把自动装配的原理和实现方法娓娓道来。

  实现原理其实比较简单,主要由以下3个步骤构成:

    1. 通过 request.getParameterMap() 获取被提交的 Form 的所有表单域的名称-值映射,其中名称和值均为字符串类型。
    2. 利用 java.beans.PropertyDescriptor 对象获取 Java Bean 的所有属性的名称及其类型。
    3. 把表单域的名称与 Bean 的属性的名称逐个进行匹配,当找到相匹配的属性时就调用 Bean 的 setter 方法把表单域的值设置给该 Bean 属性。当然,因为表单域的值总是字符串类型,很可能与 Bean 属性的类型不一致,所以在设置 Bean 属性前要进行必要的类型转换。

  上面所表述的3点原理不知大家是否完全理解,没关系,下面我们通过一个具体的表单提交的例子来看一看实际的效果,首先看看待提交的表单页面及其代码:

深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配

<form action="checkbean.action" method="post">import vo.Persion;import com.bruce.mvc.ActionSupport;public class CheckBean extends ActionSupportpublic class Persion    // getter 和 setter 方法import com.bruce.util.http.HttpHelper;/** {@link Action} 对象公共基类 */    /** 默认 {@link Action} 入口方法(返回 {@link Action#SUCCESS}) */    /** 使用表单元素创建 Form Bean (表单元素的名称和 Form Bean 属性名完全一致) */    /** 使用表单元素创建 Form Bean (用 keyMap 映射与表单元素名称不对应的 Form Bean 属性) */import com.bruce.util.BeanHelper;/** HTTP 帮助类 */    /** 使用表单元素创建 Form Bean (用 keyMap 映射与表单元素名称不对应的 Form Bean 属性) */    // 其它方法    /** 设置 Java Bean 的属性            T value    = o.getValue();    public static final <T> void setProperties(Object bean, Map<String, T> properties)    // 设置指定属性值    // 设置具体属性值                for(int i = 0; st.hasMoreTokens(); i++)            for(int i = 0; i < length; i++)    static    /** 检查 clazz 是否为简单数据类型 */    /** String -> Any,如果 handler 为 null 则把字符串转换为 8 种基础数据类型、及其包装类、 {@link Date} 或 {@link String},import java.beans.IntrospectionException;import com.bruce.util.BeanHelper;@SuppressWarnings("unused")    private static void test()    private static void testStr2Object() throws IntrospectionException    private static void test_setProperty()    private static void test_setProperties_1() throws Exceptionimport java.util.Date;    public boolean isB()    public void setB(boolean b)}public class C extends A    public String[] getSa()
{
return sa;
}
public void setSa(String[] sa)
{
this.sa = sa;
}
public static int getSi()
{
return si;
}
public static void setSi(int si)
{
C.si = si;
}
public int getFi()
{
return fi;
}
public String getStr()
{
return str;
}
public void setStr(String str)
{
this.str = str;
}
public int[] getIa()
{
return ia;
}
public void setIa(int[] ia)
{
this.ia = ia;
}
public int getI()
{
return i;
}
public void setI(int i)
{
this.i = i;
}
public Double getL()
{
return l;
}
public void setL(Double l)
{
this.l = l;
}
public Date getDt()
{
return dt;
}
public void setDt(Date dt)
{
this.dt = dt;
}
}

 

  老规矩,想看完整代码者请轻轻 touch  Source Code ^_^ 

 

 

怪兽的博客  怪兽的微博

原标题:深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配

关键词:java,POJO,bean,web,form,反射

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。