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 閱讀(449) 評論(0)  編輯  收藏 所屬分類: common

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類(17)

          隨筆檔案(28)

          文章分類(30)

          文章檔案(30)

          相冊

          收藏夾(2)

          hibernate

          java基礎

          mysql

          xml

          關注

          壓力測試

          算法

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 96753
          • 排名 - 600

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 枝江市| 金溪县| 西平县| 和平区| 海阳市| 昌黎县| 青川县| 青浦区| 阳原县| 黎川县| 阳江市| 科技| 资源县| 温泉县| 盘锦市| 栾川县| 封开县| 壤塘县| 谷城县| 都昌县| 阳原县| 深水埗区| 霍山县| 通州市| 石柱| 肃南| 民权县| 浮梁县| 高雄县| 顺昌县| 辛集市| 新郑市| 贵定县| 苍南县| 洞口县| 安康市| 图木舒克市| 衡南县| 电白县| 宝兴县| 思茅市|