posts - 28,  comments - 15,  trackbacks - 0

DynaBean 的使用

       在正常的开发的过程中,我们时常会遇到这样的问题, JavaBean 的属性是不确定的、动态的,其属性的确定是由逻辑控制来处理的。比如这样的一种情况,有一组基本报表信息需要 JavaBean 来描述,这组报表在结构上具有很大的相似性,如果你不想为每一份基本报表都创建一个 JavaBean ,那么接下来为你介绍一种为 JavaBean 动态创建属性的方法。

1.   DynaBean 的创建

       为了描述的便利,我们虚拟一个简单的需求环境,就以上面提到的描述一组基本报表信息为例吧,我们假设基本报表的名称为 basicReport ,每一份基本报表都包含 3 个属性 id name rowNo( 行号 ) 。在下面我们将使用 org.apache.commons.beanutils 包提供为我们的一些接口和类来处理上面提到的需求。

1.1. DynaBean and DynaClass

DynaBean DynaClass beanutils 包实现 DynaBean 最基本、最常用的接口。对于 DynaBean DynaClass 你可以这样理解, DanyBean 提供了可以动态修改实现他的类的属性名称、属性值、属性类型的功能;而 DynaClass 负责为一个或者多个实现了 DanyBean 接口的对象提供属性的功能, DynaClass 提供的属性正是我们动态创建的那些属性参考 。如果你不理解,在下一节 BasicDynaBean and BasicDynaClass 我们以实例展示。

关于 DynaBean DynaClass 的详细描述,参见 DynaBean DynaClass

1.2. BasicDynaBean and BasicDynaClass

BasicDynaBean BasicDynaClass 分别实现了 DynaBean DynaClass 接口, BasicDynaBean BasicDynaClass 实现了提供一组基本的属性的能力,这组属性是由你动态定义的,而且这组属性中的成员应该是 DynaProperty 类的实例。首先,你要为 DynaClass 创建你所关心的一组属性,代码如下:  

示例代码:

           DynaProperty[] props = new DynaProperty[]

{

                   new DynaProperty("id",String.class),

                   new DynaProperty("name", String.class),

                   new DynaProperty("rowNo", int.class),

                   new DynaProperty("c1",  long.class),

                   new DynaProperty("c2",long.class),

                   new DynaProperty("c3",long.class)

           };

BasicDynaClass dynaClass = new BasicDynaClass("basicReport", null, props);

 

 

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

      

说明:                                                                  

       BasicDynaClass 一共提供了3个构造函数,我这里强调的只有一点,对于参数dynaBeanClass的一个说明。在上面的代码中,我们指定要创建一个名称为“ basicReport ”的DynaBean,dynaBeanClass参数说明的是你希望系统为你创建的DynaBean的类型是什么,如果为null的话,系统就认为你要创建的是BasicDynaBean类型的DynaBean实例。如果你希望用其他类型代替null的话,那么指定的类应该实现了DynaClass接口,否则就会抛出IllegalArgumentException 异常                                                                                                             

 

 

                    

 

 

 

 

 

 

 

 

 

 

 


       在上面的代码中,我们假设为 basicReport 创建了 6 个属性,同时告诉了 BasicDynaClass ,我们需要创建一个名称为 basicReport 的报表, basicReport 的类型我们采用默认的 BasicDynaBean 。接下来,我们由 dynaClass 对象为我们实例化我们设置的这个动态对象,参考代码如下:

        

示例代码:

              DynaBean basicReport = dynaClass.newInstance();

           basicReport.set("id","124578");

           basicReport.set("name"," 在校生数 ");

           basicReport.set("rowNo",new Integer(1));

           basicReport.set("c1",new Long(125));

           basicReport.set("c2",new Long(125));

           basicReport.set("c3",new Long(125));

             

              String id = (String)basicReport.get(“id”);

              String name = (String) basicReport.get("name");

           int rowNo = ((Integer)basicReport.get("rowNo")).intValue();

 

 

 

 

 

 

 

 

 

 

 


         

在上面的代码中我们完成了 DynaBean 的实例化 (basicReport) ,并且对实例化的 basicReport 进行了设置和获取的操作。

关于 DynaBean 还有其他形式的应用,像 ResultSetDynaClass LazyDynaBean 等分别描述了如何处理数据库检索结果集的 DynaBean 处理、以及简略 DynaProperties 处理的 LazyDynaBean 的处理方式,这些都能极大地简化开发过程中 JavaBean 的处理,要了解更多请参考 http://jakarta.apache.org/commons/beanutils/api/index.html

上面讲述的常常是在逻辑处理时碰到的,那么在 Struts 框架下动态的页面的显示以及提交是否也有这方面的处理呢?答案是肯定的。

DynaBean 的使用

       在正常的开发的过程中,我们时常会遇到这样的问题, JavaBean 的属性是不确定的、动态的,其属性的确定是由逻辑控制来处理的。比如这样的一种情况,有一组基本报表信息需要 JavaBean 来描述,这组报表在结构上具有很大的相似性,如果你不想为每一份基本报表都创建一个 JavaBean ,那么接下来为你介绍一种为 JavaBean 动态创建属性的方法。

1.   DynaBean 的创建

       为了描述的便利,我们虚拟一个简单的需求环境,就以上面提到的描述一组基本报表信息为例吧,我们假设基本报表的名称为 basicReport ,每一份基本报表都包含 3 个属性 id name rowNo( 行号 ) 。在下面我们将使用 org.apache.commons.beanutils 包提供为我们的一些接口和类来处理上面提到的需求。

1.1. DynaBean and DynaClass

DynaBean DynaClass beanutils 包实现 DynaBean 最基本、最常用的接口。对于 DynaBean DynaClass 你可以这样理解, DanyBean 提供了可以动态修改实现他的类的属性名称、属性值、属性类型的功能;而 DynaClass 负责为一个或者多个实现了 DanyBean 接口的对象提供属性的功能, DynaClass 提供的属性正是我们动态创建的那些属性参考 。如果你不理解,在下一节 BasicDynaBean and BasicDynaClass 我们以实例展示。

关于 DynaBean DynaClass 的详细描述,参见 DynaBean DynaClass

1.2. BasicDynaBean and BasicDynaClass

BasicDynaBean BasicDynaClass 分别实现了 DynaBean DynaClass 接口, BasicDynaBean BasicDynaClass 实现了提供一组基本的属性的能力,这组属性是由你动态定义的,而且这组属性中的成员应该是 DynaProperty 类的实例。首先,你要为 DynaClass 创建你所关心的一组属性,代码如下:

 

 

示例代码:

           DynaProperty[] props = new DynaProperty[]

{

                   new DynaProperty("id",String.class),

                   new DynaProperty("name", String.class),

                   new DynaProperty("rowNo", int.class),

                   new DynaProperty("c1",  long.class),

                   new DynaProperty("c2",long.class),

                   new DynaProperty("c3",long.class)

           };

BasicDynaClass dynaClass = new BasicDynaClass("basicReport", null, props);

 

 

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

      

说明:                                                                  

       BasicDynaClass 一共提供了3个构造函数,我这里强调的只有一点,对于参数dynaBeanClass的一个说明。在上面的代码中,我们指定要创建一个名称为“ basicReport ”的DynaBean,dynaBeanClass参数说明的是你希望系统为你创建的DynaBean的类型是什么,如果为null的话,系统就认为你要创建的是BasicDynaBean类型的DynaBean实例。如果你希望用其他类型代替null的话,那么指定的类应该实现了DynaClass接口,否则就会抛出IllegalArgumentException 异常                                                                                                             

 

 

                    

 

 

 

 

 

 

 

 

 

 

 


       在上面的代码中,我们假设为 basicReport 创建了 6 个属性,同时告诉了 BasicDynaClass ,我们需要创建一个名称为 basicReport 的报表, basicReport 的类型我们采用默认的 BasicDynaBean 。接下来,我们由 dynaClass 对象为我们实例化我们设置的这个动态对象,参考代码如下:

        

示例代码:

              DynaBean basicReport = dynaClass.newInstance();

           basicReport.set("id","124578");

           basicReport.set("name"," 在校生数 ");

           basicReport.set("rowNo",new Integer(1));

           basicReport.set("c1",new Long(125));

           basicReport.set("c2",new Long(125));

           basicReport.set("c3",new Long(125));

             

              String id = (String)basicReport.get(“id”);

              String name = (String) basicReport.get("name");

           int rowNo = ((Integer)basicReport.get("rowNo")).intValue();

 

 

 

 

 

 

 

 

 

 

 


      

 

 

 

在上面的代码中我们完成了 DynaBean 的实例化 (basicReport) ,并且对实例化的 basicReport 进行了设置和获取的操作。

关于 DynaBean 还有其他形式的应用,像 ResultSetDynaClass LazyDynaBean 等分别描述了如何处理数据库检索结果集的 DynaBean 处理、以及简略 DynaProperties 处理的 LazyDynaBean 的处理方式,这些都能极大地简化开发过程中 JavaBean 的处理,要了解更多请参考 http://jakarta.apache.org/commons/beanutils/api/index.html

上面讲述的常常是在逻辑处理时碰到的,那么在 Struts 框架下动态的页面的显示以及提交是否也有这方面的处理呢?答案是肯定的。

posted on 2006-10-17 18:12 zhangxl 阅读(444) 评论(0)  编辑  收藏 所属分类: common

只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类(17)

随笔档案(28)

文章分类(30)

文章档案(30)

相册

收藏夹(2)

hibernate

java基础

mysql

xml

关注

压力测试

算法

最新随笔

搜索

  •  

积分与排名

  • 积分 - 95630
  • 排名 - 603

最新评论

阅读排行榜

评论排行榜