DynaBean
的使用
??????
在正常的開發(fā)的過程中,我們時常會遇到這樣的問題,
JavaBean
的屬性是不確定的、動態(tài)的,其屬性的確定是由邏輯控制來處理的。比如這樣的一種情況,有一組基本報(bào)表信息需要
JavaBean
來描述,這組報(bào)表在結(jié)構(gòu)上具有很大的相似性,如果你不想為每一份基本報(bào)表都創(chuàng)建一個
JavaBean
,那么接下來為你介紹一種為
JavaBean
動態(tài)創(chuàng)建屬性的方法。
1.??
DynaBean
的創(chuàng)建
??????
為了描述的便利,我們虛擬一個簡單的需求環(huán)境,就以上面提到的描述一組基本報(bào)表信息為例吧,我們假設(shè)基本報(bào)表的名稱為
basicReport
,每一份基本報(bào)表都包含
3
個屬性
id
、
name
、
rowNo(
行號
)
。在下面我們將使用
org.apache.commons.beanutils
包提供為我們的一些接口和類來處理上面提到的需求。
1.1.
DynaBean and DynaClass
DynaBean
和
DynaClass
是
beanutils
包實(shí)現(xiàn)
DynaBean
最基本、最常用的接口。對于
DynaBean
和
DynaClass
你可以這樣理解,
DanyBean
提供了可以動態(tài)修改實(shí)現(xiàn)他的類的屬性名稱、屬性值、屬性類型的功能;而
DynaClass
負(fù)責(zé)為一個或者多個實(shí)現(xiàn)了
DanyBean
接口的對象提供屬性的功能,
DynaClass
提供的屬性正是我們動態(tài)創(chuàng)建的那些屬性參考
。如果你不理解,在下一節(jié)
BasicDynaBean and BasicDynaClass
我們以實(shí)例展示。
關(guān)于
DynaBean
和
DynaClass
的詳細(xì)描述,參見
DynaBean
和
DynaClass
。
1.2.
BasicDynaBean and BasicDynaClass
BasicDynaBean
和
BasicDynaClass
分別實(shí)現(xiàn)了
DynaBean
和
DynaClass
接口,
BasicDynaBean
和
BasicDynaClass
實(shí)現(xiàn)了提供一組基本的屬性的能力,這組屬性是由你動態(tài)定義的,而且這組屬性中的成員應(yīng)該是
DynaProperty
類的實(shí)例。首先,你要為
DynaClass
創(chuàng)建你所關(guān)心的一組屬性,代碼如下:
?
示例代碼:
??????
??? 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個構(gòu)造函數(shù),我這里強(qiáng)調(diào)的只有一點(diǎn),對于參數(shù)dynaBeanClass的一個說明。在上面的代碼中,我們指定要創(chuàng)建一個名稱為“
basicReport
”的DynaBean,dynaBeanClass參數(shù)說明的是你希望系統(tǒng)為你創(chuàng)建的DynaBean的類型是什么,如果為null的話,系統(tǒng)就認(rèn)為你要創(chuàng)建的是BasicDynaBean類型的DynaBean實(shí)例。如果你希望用其他類型代替null的話,那么指定的類應(yīng)該實(shí)現(xiàn)了DynaClass接口,否則就會拋出IllegalArgumentException
異常
。
????????????????????????????????????????????????????????????????????????????????????????????????????????????
?
?
????????????????????
?
|
?
?
?
?
?
?
?
?
?
?
??????
在上面的代碼中,我們假設(shè)為
basicReport
創(chuàng)建了
6
個屬性,同時告訴了
BasicDynaClass
,我們需要創(chuàng)建一個名稱為
basicReport
的報(bào)表,
basicReport
的類型我們采用默認(rèn)的
BasicDynaBean
。接下來,我們由
dynaClass
對象為我們實(shí)例化我們設(shè)置的這個動態(tài)對象,參考代碼如下:
?
??????
示例代碼:
????????????? DynaBean basicReport = dynaClass.newInstance();
??????
??? basicReport.set("id","124578");
??????
??? basicReport.set("name","
在校生數(shù)
");
??????
??? 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
的實(shí)例化
(basicReport)
,并且對實(shí)例化的
basicReport
進(jìn)行了設(shè)置和獲取的操作。
關(guān)于
DynaBean
還有其他形式的應(yīng)用,像
ResultSetDynaClass
、
LazyDynaBean
等分別描述了如何處理數(shù)據(jù)庫檢索結(jié)果集的
DynaBean
處理、以及簡略
DynaProperties
處理的
LazyDynaBean
的處理方式,這些都能極大地簡化開發(fā)過程中
JavaBean
的處理,要了解更多請參考
http://jakarta.apache.org/commons/beanutils/api/index.html
。
上面講述的常常是在邏輯處理時碰到的,那么在
Struts
框架下動態(tài)的頁面的顯示以及提交是否也有這方面的處理呢?答案是肯定的。
DynaBean
的使用
??????
在正常的開發(fā)的過程中,我們時常會遇到這樣的問題,
JavaBean
的屬性是不確定的、動態(tài)的,其屬性的確定是由邏輯控制來處理的。比如這樣的一種情況,有一組基本報(bào)表信息需要
JavaBean
來描述,這組報(bào)表在結(jié)構(gòu)上具有很大的相似性,如果你不想為每一份基本報(bào)表都創(chuàng)建一個
JavaBean
,那么接下來為你介紹一種為
JavaBean
動態(tài)創(chuàng)建屬性的方法。
1.??
DynaBean
的創(chuàng)建
??????
為了描述的便利,我們虛擬一個簡單的需求環(huán)境,就以上面提到的描述一組基本報(bào)表信息為例吧,我們假設(shè)基本報(bào)表的名稱為
basicReport
,每一份基本報(bào)表都包含
3
個屬性
id
、
name
、
rowNo(
行號
)
。在下面我們將使用
org.apache.commons.beanutils
包提供為我們的一些接口和類來處理上面提到的需求。
1.1.
DynaBean and DynaClass
DynaBean
和
DynaClass
是
beanutils
包實(shí)現(xiàn)
DynaBean
最基本、最常用的接口。對于
DynaBean
和
DynaClass
你可以這樣理解,
DanyBean
提供了可以動態(tài)修改實(shí)現(xiàn)他的類的屬性名稱、屬性值、屬性類型的功能;而
DynaClass
負(fù)責(zé)為一個或者多個實(shí)現(xiàn)了
DanyBean
接口的對象提供屬性的功能,
DynaClass
提供的屬性正是我們動態(tài)創(chuàng)建的那些屬性參考
。如果你不理解,在下一節(jié)
BasicDynaBean and BasicDynaClass
我們以實(shí)例展示。
關(guān)于
DynaBean
和
DynaClass
的詳細(xì)描述,參見
DynaBean
和
DynaClass
。
1.2.
BasicDynaBean and BasicDynaClass
BasicDynaBean
和
BasicDynaClass
分別實(shí)現(xiàn)了
DynaBean
和
DynaClass
接口,
BasicDynaBean
和
BasicDynaClass
實(shí)現(xiàn)了提供一組基本的屬性的能力,這組屬性是由你動態(tài)定義的,而且這組屬性中的成員應(yīng)該是
DynaProperty
類的實(shí)例。首先,你要為
DynaClass
創(chuàng)建你所關(guān)心的一組屬性,代碼如下:
?
?
示例代碼:
??????
??? 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個構(gòu)造函數(shù),我這里強(qiáng)調(diào)的只有一點(diǎn),對于參數(shù)dynaBeanClass的一個說明。在上面的代碼中,我們指定要創(chuàng)建一個名稱為“
basicReport
”的DynaBean,dynaBeanClass參數(shù)說明的是你希望系統(tǒng)為你創(chuàng)建的DynaBean的類型是什么,如果為null的話,系統(tǒng)就認(rèn)為你要創(chuàng)建的是BasicDynaBean類型的DynaBean實(shí)例。如果你希望用其他類型代替null的話,那么指定的類應(yīng)該實(shí)現(xiàn)了DynaClass接口,否則就會拋出IllegalArgumentException
異常
。
????????????????????????????????????????????????????????????????????????????????????????????????????????????
?
?
????????????????????
?
|
?
?
?
?
?
?
?
?
?
?
??????
在上面的代碼中,我們假設(shè)為
basicReport
創(chuàng)建了
6
個屬性,同時告訴了
BasicDynaClass
,我們需要創(chuàng)建一個名稱為
basicReport
的報(bào)表,
basicReport
的類型我們采用默認(rèn)的
BasicDynaBean
。接下來,我們由
dynaClass
對象為我們實(shí)例化我們設(shè)置的這個動態(tài)對象,參考代碼如下:
?
??????
示例代碼:
????????????? DynaBean basicReport = dynaClass.newInstance();
??????
??? basicReport.set("id","124578");
??????
??? basicReport.set("name","
在校生數(shù)
");
??????
??? 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
的實(shí)例化
(basicReport)
,并且對實(shí)例化的
basicReport
進(jìn)行了設(shè)置和獲取的操作。
關(guān)于
DynaBean
還有其他形式的應(yīng)用,像
ResultSetDynaClass
、
LazyDynaBean
等分別描述了如何處理數(shù)據(jù)庫檢索結(jié)果集的
DynaBean
處理、以及簡略
DynaProperties
處理的
LazyDynaBean
的處理方式,這些都能極大地簡化開發(fā)過程中
JavaBean
的處理,要了解更多請參考
http://jakarta.apache.org/commons/beanutils/api/index.html
。
上面講述的常常是在邏輯處理時碰到的,那么在
Struts
框架下動態(tài)的頁面的顯示以及提交是否也有這方面的處理呢?答案是肯定的。
posted on 2006-10-17 18:12
zhangxl 閱讀(448)
評論(0) 編輯 收藏 所屬分類:
common