java程式猿的成長記錄之(二)web中自訂標籤tld與業務字典的結合使用感悟__web

來源:互聯網
上載者:User
  *博主也做過幾個或大或小的web後台項目,其中資料庫必不可少有字典表用來儲存一些常用的業務字典,頁面渲染也少不了各種標籤以及運算式.我們在查詢資料時候,主表一般會儲存字典表的主鍵,然後通過聯表查詢來擷取對應的字典.現在我想分享一種"另一種方式",和大家一起討論學習*

思路如下:
1.在web容器初始化時,將字典表中資料全部緩衝起來(HashMap,或者第三方緩衝).
2.資料查詢時不再與字典表進行關聯.
3.頁面渲染時候用自訂tld標籤進行資料展示.

大家也許會對tld標籤陌生,但是提及JSTL運算式的fn函數大家一定不陌生,fn函數給我們提供的方法在這裡我不再進行一一闡述.其中的實現也是通過java來進行實現(是不是很熟悉。。。)

自訂tld只不過是對其進行自訂擴充,廢話少說,迴歸正題,開始coding

//通過類型擷取字典列表public static List<EtlDict> getEtlDictList(String type){    //建立全域緩衝    Map<String, List<EtlDict>> etlDictMap = (Map<String, List<EtlDict>>)CacheUtils.get(CACHE_ETLDICT_MAP);    if (etlDictMap==null){        etlDictMap = Maps.newHashMap();        //字典表按照類型進行儲存        for (EtlDict gt : etlDictDao.findAllList(new EtlDict())){            List<EtlDict> dictList = etlDictMap.get(gt.getType());            if (dictList != null){                dictList.add(gt);            }else{                etlDictMap.put(gt.getType(), Lists.newArrayList(gt));            }        }        CacheUtils.put(CACHE_ETLDICT_MAP, etlDictMap);    }    List<EtlDict> etlDictList = etlDictMap.get(type);    if (etlDictList == null){        etlDictList = Lists.newArrayList();    }    return etlDictList;}//通過類型和值擷取標籤public static String getEtlDictLabel(String value, String type, String defaultValue){    if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(value)){        for (EtlDict gt : getEtlDictList(type)){            if (type.equals(gt.getType()) && value.equals(gt.getValue())){                return gt.getLabel();            }        }    }    return defaultValue;}

進行自訂tld檔案建立與定義

<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  version="2.0">  <description>JSTL 1.1 functions library</description>  <display-name>JSTL functions etl</display-name>  <tlib-version>1.1</tlib-version>  <short-name>fna</short-name>  <uri>http://java.sun.com/jsp/jstl/functionse</uri>  <function>    <description>方法描述</description>    <name>方法名字</name>    <function-class>方法所在類</function-class>    <function-signature>傳回值  方法名(參數)</function-signature>    <example>運用舉例</example>    </function>  <function>    <description>擷取字典對象列表</description>    <name>getEtlDictList</name>    <function-class>gt.com.etl.common.utils.EtlDictUtils</function-class>    <function-signature>java.util.List getEtlDictList(java.lang.String)</function-signature>    <example>${fna:getEtlDictList(type)}</example>    </function> <function>    <description>通過類型和值擷取標籤</description>    <name>getEtlDictLabel</name>    <function-class>gt.com.etl.common.utils.EtlDictUtils</function-class>    <function-signature>java.lang.String getEtlDictLabel(java.lang.String, java.lang.String, java.lang.String)</function-signature>    <example>${fna:getEtlDictLabel(value, type, defaultValue)}</example>    </function>

自訂的tld檔案引用方法和jstl的標籤引用大同小異

在頁面用使用自訂的tld標籤

<td>    ${fna:keepTwoDecimal(asset.costPrice)}</td><td>    ${fna:keepTwoDecimal(asset.sellPrice)}</td><td>    ${fna:getEtlDictLabel(asset.source,'source','')}</td>

編碼完畢,您看懂了麼。。
和大家分享目的有兩點:
1.可以通過自訂標籤隨心所欲處理jstl自身提供標籤所無法完成的邏輯 2.字典的另一種實現使用方式,撇開效能不談.
歡迎大家指點交流…….

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.