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

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

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

    zhyiwww
    用平實的筆,記錄編程路上的點點滴滴………
    posts - 536,comments - 394,trackbacks - 0
    ?

    我們在Web開發中,可能經常會從表單中取值,然后封裝成一個bean的時候。

    可能你也是這樣做的:

    String?uname?=?(String)request.getParameter("uname");

    String?upass?=?(String)request.getParameter("upass");

    User?u?=?new?User(uname,upass);

    或者

    U.set……

    u.set……

    等等

    如果字段很多的話,可能前面就要很多的各這樣的過程。也許你也會覺得很是麻煩,又沒有好的辦法。

    我們可以使用反射來實現,也許可以減輕一點您的負擔。

    代碼如下:

    User?u?=?new?User();

    ??

    ??Enumeration?m?=?request.getParameterNames();

    ??while(m.hasMoreElements()){

    ???String??pn?=?(String)m.nextElement();

    ???out.println(pn?+?"?---?");

    ???String??pv?=?(String)request.getParameter(pn);

    ???out.println(?pv?+?"<br>");

    ???

    ???Class?c?=?u.getClass();???

    ???out.println("?class?is?:?"?+?c?+?"<br>");

    ???

    ???try?{

    ???????

    ????Field?f?=?c.getField(pn);

    ????

    ????out.println("field?is?:?"?+?f?+?"<br>");

    ????f.set(u,?pv);

    ????

    ????out.println("?user?name?is?:?"?+?u.getUname()?+?"<br>");

    ????out.println("?user?pass?is?:?"?+?u.getUpass()?+?"<br>");

    ????

    ???}?catch?(SecurityException?e)?{

    ????//?TODO?Auto-generated?catch?block

    ????e.printStackTrace();

    ???}?catch?(NoSuchFieldException?e)?{

    ????//?TODO?Auto-generated?catch?block

    ????e.printStackTrace();

    ???}?catch?(IllegalArgumentException?e)?{

    ????//?TODO?Auto-generated?catch?block

    ????e.printStackTrace();

    ???}?catch?(IllegalAccessException?e)?{

    ????//?TODO?Auto-generated?catch?block

    ????e.printStackTrace();

    ???}

    ??}

    ??我們也可以把這個部分封裝起來成一個類,實現從request到一個bean的注入。

    上面的方法有一個缺點,由于我們使用的Field來實現的,所以,能取得的字段一定要聲明成public,如果是private的,就不能取到了。

    測試結果如下:

    uname?---?zywewqeqwe

    class?is?:?class?org.zy.demo.sd.bean.User

    private?field?is?:?private?java.lang.String?org.zy.demo.sd.bean.User.uname

    upass?---?zywqeqweqweqw

    class?is?:?class?org.zy.demo.sd.bean.User

    private?field?is?:?private?java.lang.String?org.zy.demo.sd.bean.User.upass

    解決上面的問題,我們可以使用另外一個方法:

    ?

    ????Field?f?=?c.getDeclaredField(pn);

    ????out.println("?private?field?is?:?"?+?f?+?"<br>");

    就這一個方法的不同就可以實現和上面的不同的結果,上面的

    ?Field?f?=?c.getField(pn);

    可以能取public的字段,但是

    getDeclaredField(pn);

    同時可以取到private字段的值。

    注意:

    上面的功能要能實現,要保證form的字段和bean定義的字段的完全一致。

    希望自己的一點小小的體會能對您起到一點幫助作用。



    |----------------------------------------------------------------------------------------|
                               版權聲明  版權所有 @zhyiwww
                引用請注明來源 http://www.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2007-09-21 18:08 zhyiwww 閱讀(1200) 評論(2)  編輯  收藏 所屬分類: j2ee

    FeedBack:
    # re: Web開發中使用反射為Bean賦值
    2007-09-22 00:05 | 千里冰封
    反射用得好的話,是很靈活的  回復  更多評論
      
    # re: Web開發中使用反射為Bean賦值
    2007-09-22 07:28 | sitinspring
    文章不錯,格式可以稍微調整一下.  回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产成人VA在线观看| 91情侣在线精品国产免费| 免费一级国产生活片| 久久狠狠爱亚洲综合影院| 69精品免费视频| 亚洲国产午夜电影在线入口| 亚洲综合免费视频| 亚洲国产日韩在线成人蜜芽 | 特级毛片爽www免费版| 免费久久精品国产片香蕉| 日韩精品无码免费视频| 亚洲真人日本在线| 成人国产精品免费视频| 亚洲精品国偷自产在线| 日本亚洲欧洲免费天堂午夜看片女人员 | 日本在线高清免费爱做网站| 亚洲天堂一区在线| 成人黄页网站免费观看大全| 麻豆亚洲AV成人无码久久精品 | 大香人蕉免费视频75| 女bbbbxxxx另类亚洲| 亚洲美女在线国产| 国产一区二区免费视频| 亚洲成在人天堂在线| 91免费国产自产地址入| 亚洲AV无码片一区二区三区| 亚洲日韩在线观看| 9420免费高清在线视频| 亚洲砖码砖专无区2023 | 亚洲美女自拍视频| 好男人视频社区精品免费| 日韩在线观看免费完整版视频| 亚洲乱码国产乱码精品精| 波多野结衣在线免费观看| 含羞草国产亚洲精品岁国产精品 | 亚洲视频欧洲视频| 国产成人免费手机在线观看视频| 精品国产呦系列在线观看免费| 精品亚洲成a人片在线观看少妇| 麻豆国产人免费人成免费视频| 久久久受www免费人成|