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

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

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

    CONAN ZONE

    你越掙扎我就越興奮

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks
    一. 使用反射動態(tài)取出 Pojo 的屬性

    這一招在一些特殊的場合下非常管用.比如說,用戶在第一個(gè)頁面,選擇了某個(gè)實(shí)體其中要顯示出來的幾個(gè)屬性,那個(gè)這個(gè)時(shí)候用反射是非常不錯(cuò)的選擇,少了大量 if 語句:

    Java代碼 復(fù)制代碼
    1. package com.leo.util;   
    2.   
    3. import java.lang.reflect.Method;   
    4.   
    5. public class HelloWorldBean {   
    6.   
    7.     private String word;   
    8.   
    9.     private String name;   
    10.   
    11.     public String getName() {   
    12.         return name;   
    13.     }   
    14.   
    15.     public void setName(String name) {   
    16.         this.name = name;   
    17.     }   
    18.   
    19.     public String getWord() {   
    20.         return word;   
    21.     }   
    22.   
    23.     public void setWord(String word) {   
    24.         this.word = word;   
    25.     }   
    26.   
    27.     public HelloWorldBean() {   
    28.         name = "superleo";   
    29.         word = "Hello World!!!";   
    30.     }   
    31.   
    32.     public String getProperty(String name) throws Exception {   
    33.         if (name != null && !name.equals("")) {   
    34.             Character ch = name.charAt(0);   
    35.             name = Character.toUpperCase(ch) + name.substring(1, name.length());   
    36.             Class cls = Class.forName("com.leo.util.HelloWorldBean");   
    37.             Method meth = cls.getMethod("get" + name, null);   
    38.             Object retobj = meth.invoke(this, null);   
    39.             return (String) retobj;   
    40.   
    41.         }   
    42.         throw new RuntimeException();   
    43.     }   
    44.   
    45.     public static void main(String[] args) throws Exception {   
    46.         HelloWorldBean bean = new HelloWorldBean();   
    47.         bean.setName("superleo");   
    48.         bean.setWord("name");   
    49.         System.out.println(bean.getProperty("name"));   
    50.         System.out.println(bean.getProperty("word"));   
    51.     }   
    52.   
    53. }  
    package com.leo.util;
    import java.lang.reflect.Method;
    public class HelloWorldBean {
    private String word;
    private String name;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getWord() {
    return word;
    }
    public void setWord(String word) {
    this.word = word;
    }
    public HelloWorldBean() {
    name = "superleo";
    word = "Hello World!!!";
    }
    public String getProperty(String name) throws Exception {
    if (name != null && !name.equals("")) {
    Character ch = name.charAt(0);
    name = Character.toUpperCase(ch) + name.substring(1, name.length());
    Class cls = Class.forName("com.leo.util.HelloWorldBean");
    Method meth = cls.getMethod("get" + name, null);
    Object retobj = meth.invoke(this, null);
    return (String) retobj;
    }
    throw new RuntimeException();
    }
    public static void main(String[] args) throws Exception {
    HelloWorldBean bean = new HelloWorldBean();
    bean.setName("superleo");
    bean.setWord("name");
    System.out.println(bean.getProperty("name"));
    System.out.println(bean.getProperty("word"));
    }
    }
    

    OK ,假設(shè)我們在 HelloAction 使用了這個(gè) HelloWorldBean ,并且運(yùn)行后,跳轉(zhuǎn)到相應(yīng)頁面,你可以這樣去取 HelloWorldBean word name 屬性了:

    Html代碼 復(fù)制代碼
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%@ taglib prefix="s" uri="/struts-tags"%>  
    3. <html>  
    4.     <body>  
    5.         <h3>  
    6.             正常方法:<s:property value="helloWorld.name" /> <br />  
    7.             <s:property value="helloWorld.word" /> <br />  
    8.             反射方法:<s:property value="helloWorld.getProperty('name')" /> <br />  
    9.             <s:property value="helloWorld.getProperty('word')" />  
    10.         </h3>  
    11.     </body>  
    12. </html>  
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <body>
    <h3>
    正常方法:<s:property value="helloWorld.name" /> <br />
    <s:property value="helloWorld.word" /> <br />
    反射方法:<s:property value="helloWorld.getProperty('name')" /> <br />
    <s:property value="helloWorld.getProperty('word')" />
    </h3>
    </body>
    </html>
    

    對于公共屬性,還可以將此方法移到父類。

    iterator 迭代 Map 對象

    這對顯示 Hibernate 多表連接的查詢結(jié)果非常管用。

    以前,在使用 Hibernate 的時(shí)候,因?yàn)樯婕暗蕉鄠€(gè)表查詢是很普遍的,每個(gè)表取一些字段,想顯示在頁面,比較好的辦法是新建一個(gè) VO 對象,專門用來顯示查詢的結(jié)果.但缺點(diǎn)就是,如果這樣的查詢很多, VO 類會越來越多(如果不斷的往一個(gè) VO 增加字段的話,那么這個(gè) VO 也越來越大,構(gòu)造函數(shù)會特別夸張),咱們來看一個(gè)例子:

    Java代碼 復(fù)制代碼
    1. List list = session.createQuery("select new MyVO(a.name, b.name, c.id) from .....").list();  

    這樣返回的 List 直接就可以在頁面上用 iterator 標(biāo)簽迭代了,但假如現(xiàn)在要取 10 呢?不僅 HQL 語句要修改,而且 MyVO 也要修改.下面是一種更好的做法:

    Java代碼 復(fù)制代碼
    1. List list = session.createQuery("select new Map(a.name as fristName, b.name as secondName, c.id as id from .....").list();  

    這里改用 Map 了,注意每個(gè)屬性都用“ as ”重新啟了一個(gè)別名,這個(gè)非常重要,否則在頁面顯示時(shí),很費(fèi)勁.

    現(xiàn)在來看頁面調(diào)用代碼:

    Html代碼 復(fù)制代碼
    1. <s:iterator value="list" id="maps">  
    2.       <tr class="row1">  
    3.       <input type="checkbox" name="ids" value="<s:property value="#maps.get('id')" />" />  
    4.       <td align="center"><s:property value="#maps.get('fristName')" /></td>  
    5.       <td align="center"><s:property value="#maps.get('secondName')" /></td>  
    6.     </tr>  
    7.     </s:iterator>  
    <s:iterator value="list" id="maps">
    <tr class="row1">
    <input type="checkbox" name="ids" value="<s:property value="#maps.get('id')" />" />
    <td align="center"><s:property value="#maps.get('fristName')" /></td>
    <td align="center"><s:property value="#maps.get('secondName')" /></td>
    </tr>
    </s:iterator>
    
     

    注意上面的頁面中 Map 的取值就是當(dāng)時(shí) hql 語句中“ as ”后的別名.

    雖然相對于以往的 JSTL 來說,要寫的標(biāo)簽代碼更多了,但強(qiáng)大的 OGNL 表達(dá)式也讓你在視圖層擁有更強(qiáng)大的靈活性與擴(kuò)展性.

    順序無關(guān),如果你使用了 select new List(...) 也能達(dá)到類似效果,但因?yàn)?/span> List 是有序的,所以在頁面顯示非常不靈活,不推薦使用.

    if 標(biāo)簽判斷漢字問題

    這個(gè)問題具體原因不明,先看下面一段代碼:

    Java代碼 復(fù)制代碼
    1. <s:if test="user.name == '程序'">   
    2. ...  
    <s:if test="user.name == '程序'">
    ...
    

    這樣就算 user.name 等于“程序”也是無法通過的,需要修改成以下代碼:

    Html代碼 復(fù)制代碼
    1. <s:if test="user.name == "'程序"'">  
    2. ...  
    <s:if test="user.name == "'程序"'">
    ...
    

    如果“程序”是你系統(tǒng)的一個(gè)常量,更推薦的作法是:

    Html代碼 復(fù)制代碼
    1. <s:if test="user.name == @com.leo.util.Constants@TYPE ">  
    2. ...  
    <s:if test="user.name == @com.leo.util.Constants@TYPE ">
    ...
    
     

    我不知道原因是不是因?yàn)榘姹締栴}?希望有知道的,回復(fù)一下.

    iterator 雙重循環(huán)

    這個(gè)也很常用,相信很多人都輕車熟路,那我們來回顧一下。假設(shè) lists 裝的都是 Group 對象, Group 持有一個(gè) List<User> 那個(gè)我們接下來可以:

    Html代碼 復(fù)制代碼
    1. <ww:iterator value="lists" id="top">  
    2. <ww:iterator value="users" id="sub">  
    3. 組名:<s:property value="#top.name" />,成員名:<s:property value="#sub.name" />  
    4. </ww:iterator>  
    5.   應(yīng)該組總數(shù):<s:property value="users.size" />  
    6. </ww:iterator>  
    <ww:iterator value="lists" id="top">
    <ww:iterator value="users" id="sub">
    組名:<s:property value="#top.name" />,成員名:<s:property value="#sub.name" />
    </ww:iterator>
    應(yīng)該組總數(shù):<s:property value="users.size" />
    </ww:iterator>
    

    上面的寫法有很多種,但效果都是一樣的,有興趣可以多看看 OGNL

    還有一些沒有及時(shí)整理好,下次統(tǒng)一再給大家分享一下.

    posted on 2008-06-26 19:55 CONAN 閱讀(246) 評論(0)  編輯  收藏 所屬分類: Struts2/Webwork
    主站蜘蛛池模板: 亚洲av中文无码字幕色不卡| 色吊丝最新永久免费观看网站 | 亚洲精品免费网站| 精品四虎免费观看国产高清午夜| 老汉色老汉首页a亚洲| 亚洲成a人片在线观| 一级毛片在线免费观看| 久久精品亚洲综合| 91香焦国产线观看看免费| 亚洲精品免费在线| 黄色大片免费网站| 亚洲综合激情另类专区| 一级做a爱片特黄在线观看免费看 一级做a爱过程免费视 | 国产无遮挡无码视频免费软件| 日日噜噜噜噜夜夜爽亚洲精品| 中文字幕亚洲男人的天堂网络| 最近最新中文字幕完整版免费高清| 亚洲中文字幕日产乱码高清app| 久久免费观看视频| 少妇中文字幕乱码亚洲影视| 国产在线观看免费观看不卡| 亚洲成AV人片在WWW| 亚洲综合亚洲综合网成人| 国产精品免费一区二区三区四区| 亚洲高清无在码在线无弹窗| a在线观看免费视频| 怡红院亚洲怡红院首页| 国产精品免费AV片在线观看| 亚洲三级在线播放| 37pao成人国产永久免费视频| 亚洲性在线看高清h片| 国产在线精品免费aaa片| 亚洲一区二区三区不卡在线播放| 免费大香伊蕉在人线国产| 久久av免费天堂小草播放| 亚洲人成片在线观看| 国产成人免费午夜在线观看| 亚洲av鲁丝一区二区三区| 妞干网手机免费视频| 亚洲日韩AV无码一区二区三区人| 亚洲国产午夜福利在线播放|