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 阅读(443)
评论(0) 编辑 收藏 所属分类:
common