<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冰浪

    哥已不再年輕 - 堅定夢想,畢生追求!
    posts - 85, comments - 90, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    受控bean與實體bean的數據傳遞

    Posted on 2006-09-25 13:51 冰浪 閱讀(1277) 評論(4)  編輯  收藏 所屬分類: Frameworks

    這些日子在用JSF+Hibernate組合來實現一簡單應用——留言本。

    ???????? 思路如下:
    ???????? 用JSF作為View層,Hibernate實現 Model層即數據持久化,而Control層則采用POJO,即JavaBean。

    ???????? 在model層,用hibernate生成持久化對象,作為與數據庫間數據交互的“介質對象”(自己命名的,呵呵)。如留言信息類Message.class,這也是POJO,即實體bean,所含方法只是setter/getter。但其卻與DB表中數據類型相對應的。

    ???????? 在view層JSF中,與頁面顯示組件進行值綁定的受控bean承擔了數據顯示與操作的任務。在此應用中,如MessageBean.class,這是與hibernate中的Message.class這一實體bean相對應的。

    ???????? 為什么不直接使用實體bean作為view層的數據顯示對象呢?這是因為在MVC模式中,任何兩層間都應該是“松藕合”狀態,而不產生相互依賴的情形。

    ???????? 既然如此,受控bean與實體bean之間又如何實現數據的傳遞呢?

    ???????? 在control層中,建立一個MessageBuilder.class類,來實現兩bean間的交互,這個類中主要利用了org.apache.commons.beanutils.BeanUtils類的copyProperties方法來實現。MessageBuilder.java的具體實現代碼如下:

    //**********MessageBuilder.java的具體實現代碼begin**************
    package efan5.myguestbook.control;

    import java.lang.reflect.InvocationTargetException;
    import org.apache.commons.beanutils.BeanUtils;

    import efan5.myguestbook.model.Message;
    import efan5.myguestbook.view.MessageBean;

    public class MessageBuilder {
    ?
    ?public MessageBuilder(){}
    ?
    ?public static Message createMessage(MessageBean messageBean){
    ??Message message = new Message();
    ??try {
    ???BeanUtils.copyProperties(message, messageBean);
    ??} catch (IllegalAccessException e) {
    ???
    ???e.printStackTrace();
    ??} catch (InvocationTargetException e) {
    ??????e.printStackTrace();
    ??}
    ??return message;
    ?}
    ?
    ?public static MessageBean createMessageBean(Message message){
    ??MessageBean messageBean = new MessageBean();
    ??try {
    ???BeanUtils.copyProperties(messageBean,message);
    ??} catch (IllegalAccessException e) {
    ???
    ???e.printStackTrace();
    ??} catch (InvocationTargetException e) {
    ??????e.printStackTrace();
    ??}
    ??return? messageBean;
    ?}

    }
    //**********MessageBuilder.java的具體實現代碼end**************

    ???????? 這就實現了受控bean與實體bean的數據交互。
    ???????? PS:BeanUtils.copyProperties(obj1,obj2) 方法要對象obj1,obj2中的相對應的屬性的名字和數據類型一致,否則會產生數據類型不匹配的異常。但并不是要求屬性數目一致。


    評論

    # re: 受控bean與實體bean的數據傳遞  回復  更多評論   

    2006-09-25 14:53 by 123bingbing
    如果你是編程高手,這里將是你一個展現自我的新舞臺----www.mylinux.com.cn

    # re: 受控bean與實體bean的數據傳遞  回復  更多評論   

    2006-09-27 06:08 by 祎恬凡
    PropertyUtils.copyProperties:Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes).

    這說明該方法可以拷貝bean中只要命名相同的屬性值,而不要求類型是否一致。當然了,類型不同的時候,他會自己去轉換,當轉換不過來的時候就會發生那個classcastexception了。

    # re: 受控bean與實體bean的數據傳遞  回復  更多評論   

    2006-09-27 06:08 by 祎恬凡
    PropertyUtils.copyProperties:Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes).
    這說明該方法可以拷貝bean中只要命名相同的屬性值,而不要求類型是否一致。當然了,類型不同的時候,他會自己去轉換,當轉換不過來的時候就會發生那個classcastexception了。

    # re: 受控bean與實體bean的數據傳遞  回復  更多評論   

    2006-09-29 16:31 by 冰川
    支持下,呵呵!
    主站蜘蛛池模板: 最近最新的免费中文字幕| 久久国产免费直播| 97久久国产亚洲精品超碰热| 亚洲黄色在线视频| 亚洲男人天堂av| 中文字幕亚洲第一在线| 亚洲视频国产精品| 亚洲最新在线视频| 亚洲冬月枫中文字幕在线看| 亚洲一区中文字幕| 亚洲国产熟亚洲女视频| 亚洲精品国产摄像头| 337P日本欧洲亚洲大胆艺术图| 国产亚洲蜜芽精品久久| 午夜在线免费视频| 中国国产高清免费av片| 成人性生交大片免费看中文| 日韩人妻一区二区三区免费| 18禁黄网站禁片免费观看不卡| 18国产精品白浆在线观看免费| 青苹果乐园免费高清在线| 日韩免费视频观看| 亚洲片国产一区一级在线观看| 在线观看亚洲天天一三视| 无码乱人伦一区二区亚洲一| 亚洲美女人黄网成人女| 在线观看亚洲AV日韩A∨| 成人精品国产亚洲欧洲| 精品国产污污免费网站入口在线| 久久国产乱子精品免费女| ww在线观视频免费观看| 好吊妞998视频免费观看在线| 亚洲A∨午夜成人片精品网站| 亚洲午夜无码久久久久| 亚洲美女视频网址| 亚洲欧美在线x视频| 二区久久国产乱子伦免费精品| 99国产精品免费视频观看| 全免费a级毛片免费**视频 | 亚洲av永久无码天堂网| 窝窝影视午夜看片免费|