日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JSP自定義標(biāo)簽實現(xiàn)數(shù)據(jù)字典

1、關(guān)于JSP標(biāo)簽的好處就不再羅嗦

專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)陽新免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

數(shù)據(jù)字典就是使用的下拉框,只要定義使用那個字典就會將這個字典可用的內(nèi)容顯示出來

顯示字典時只要定義那個字典和屬性值就可以顯示出字典的顯示值

2、首先在web.xml中定義自定義標(biāo)簽加載的引用,兩個屬性分別是引用的URI和加載路徑

 
 
 
  1.     
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee       
  4.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    
  5.         
  6.         index.jsp    
  7.         
  8.         
  9.             
  10.             /tld/web-html    
  11.                 
  12.                 /WEB-INF/tlds/web-html.tld    
  13.                 
  14.             
  15.         
  16.    

3、在web-html.tld中定義自己的標(biāo)簽,數(shù)據(jù)字典應(yīng)用的話我們需要一個標(biāo)簽庫,三個標(biāo)簽。分別是,select標(biāo)簽,options標(biāo)簽,和現(xiàn)實數(shù)據(jù)字典的標(biāo)簽,每個標(biāo)簽都對應(yīng)不同的實現(xiàn)類

 
 
 
  1.     
  2.     "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">    
  3.     
  4.     1.0    
  5.     1.2      
  6.     html       
  7.         
  8.         select    
  9.         com.SelectTag    
  10.         JSP    
  11.             
  12.             name    
  13.             true    
  14.             
  15.             
  16.             style    
  17.             true    
  18.             
  19.         
  20.         
  21.         options    
  22.         com.OptionsTag    
  23.         JSP    
  24.             
  25.             collection    
  26.             true    
  27.             
  28.         
  29.         
  30.         selectDisplay    
  31.         com.SelectDisplay    
  32.         JSP    
  33.             
  34.             collection    
  35.             true    
  36.             
  37.             
  38.             name    
  39.             true    
  40.             
  41.             
  42.             value    
  43.             true    
  44.             
  45.         
  46.    

4、實現(xiàn)類

實現(xiàn)類的作用就是在后臺拼接所需HTML標(biāo)簽內(nèi)容,然后由JSP進(jìn)行輸出

實現(xiàn)類最主要的兩個方法,一個遇到這個標(biāo)簽開始時輸出,一個是結(jié)束時輸出

如果需要定義屬性,可以參考實現(xiàn)類定義屬性,并在TLD中定義,在JSP中使用標(biāo)簽時快捷鍵就可以出來這個屬性

首先是select標(biāo)簽的代碼:

 
 
 
  1. package com;    
  2. import java.io.IOException;    
  3. import javax.servlet.jsp.JspException;    
  4. import javax.servlet.jsp.JspTagException;    
  5. import javax.servlet.jsp.tagext.BodyTagSupport;    
  6. /**   
  7.  * TagSupport與BodyTagSupport的區(qū)別:   
  8.  * 主要看標(biāo)簽處理類是否要讀取標(biāo)簽體的內(nèi)容和改變標(biāo)簽體返回的內(nèi)容,如果不需要就用TagSupport,否則就用BodyTagSupport   
  9.  * 用TagSupport實現(xiàn)的標(biāo)簽,都可以用BodyTagSupport來實現(xiàn),因為BodyTagSupport繼承了TagSupport   
  10.  */    
  11. @SuppressWarnings("serial")    
  12. public class SelectTag extends BodyTagSupport {    
  13.     @Override    
  14.     public int doStartTag() throws JspException {    
  15.         try {    
  16.             StringBuffer results = new StringBuffer("
  17.             if(name != null){    
  18.                 results.append(" name=\"");    
  19.                 results.append(name);    
  20.                 results.append("\"");    
  21.             }    
  22.             if(style != null){    
  23.                 results.append(" style=\"");    
  24.                 results.append(style);    
  25.                 results.append("\"");    
  26.             }    
  27.             results.append(">");    
  28.             pageContext.getOut().write(results.toString());    
  29.         } catch (IOException ex) {    
  30.             throw new JspTagException("錯誤");    
  31.         }    
  32.         return EVAL_BODY_INCLUDE;    
  33.     }    
  34.     @Override    
  35.     public int doEndTag() throws JspException {    
  36.         try {    
  37.             StringBuffer results = new StringBuffer("");    
  38.             // 因為下拉中包含下拉內(nèi)容,所以只能在遇到結(jié)束標(biāo)簽時才能寫select結(jié)束    
  39.             results.append("");              
  40.             pageContext.getOut().write(results.toString());    
  41.         } catch (IOException ex) {    
  42.             throw new JspTagException("錯誤");    
  43.         }    
  44.         return EVAL_PAGE;    
  45.     }    
  46.     // 樣式    
  47.     protected String style;    
  48.     // 名字    
  49.     protected String name;    
  50.     public String getStyle() {    
  51.         return style;    
  52.     }    
  53.     public void setStyle(String style) {    
  54.         this.style = style;    
  55.     }    
  56.     public String getName() {    
  57.         return name;    
  58.     }    
  59.     public void setName(String name) {    
  60.         this.name = name;    
  61.     }       
  62.     /**   
  63.     doStartTag()方法是遇到標(biāo)簽開始時會呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE與SKIP_BODY,前者表示將顯示標(biāo)簽間的文字,后者表示不顯示標(biāo)簽間的文字   
  64.     doEndTag()方法是在遇到標(biāo)簽結(jié)束時呼叫的方法,其合法的返回值是EVAL_PAGE與SKIP_PAGE,前者表示處理完標(biāo)簽后繼續(xù)執(zhí)行以下的JSP網(wǎng)頁,后者是表示不處理接下來的JSP網(wǎng)頁   
  65.     doAfterBody(),這個方法是在顯示完標(biāo)簽間文字之后呼叫的,其返回值有EVAL_BODY_AGAIN與SKIP_BODY,前者會再顯示一次標(biāo)簽間的文字,后者則繼續(xù)執(zhí)行標(biāo)簽處理的下一步   
  66.     EVAL_BODY_INCLUDE:把Body讀入存在的輸出流中,doStartTag()函數(shù)可用   
  67.     EVAL_PAGE:繼續(xù)處理頁面,doEndTag()函數(shù)可用   
  68.     SKIP_BODY:忽略對Body的處理,doStartTag()和doAfterBody()函數(shù)可用   
  69.     SKIP_PAGE:忽略對余下頁面的處理,doEndTag()函數(shù)可用   
  70.     EVAL_BODY_BUFFERED:申請緩沖區(qū),由setBodyContent()函數(shù)得到的BodyContent對象來處理tag的body,如果類實現(xiàn)了BodyTag,那么doStartTag()可用,否則非法   
  71.     EVAL_BODY_AGAIN:請求繼續(xù)處理body,返回自doAfterBody(),這個返回值在你制作循環(huán)tag的時候是很有用的     
  72.     預(yù)定的處理順序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE   
  73.     如果繼承了TagSupport之后,如果沒有改寫任何的方法,標(biāo)簽處理的執(zhí)行順序是:doStartTag() ->不顯示文字 ->doEndTag()->執(zhí)行接下來的網(wǎng)頁    
  74.     如果您改寫了doStartTag(),則必須指定返回值,   
  75.     如果指定了EVAL_BODY_INCLUDE,則執(zhí)行順序是:doStartTag()->顯示文字->doAfterBodyTag()->doEndTag()->執(zhí)行下面的網(wǎng)頁   
  76.      */    
  77. }   

關(guān)于返回參數(shù),返回具體數(shù)字也可以,不用過于糾結(jié)

然后是下拉內(nèi)容實現(xiàn)類

 
 
 
  1. package com;    
  2. import java.io.IOException;    
  3. import javax.servlet.jsp.JspException;    
  4. import javax.servlet.jsp.JspTagException;    
  5. import javax.servlet.jsp.tagext.BodyTagSupport;    
  6. @SuppressWarnings("serial")    
  7. public class OptionsTag extends BodyTagSupport {    
  8.     @Override    
  9.     public int doStartTag() throws JspException {    
  10.         return EVAL_BODY_INCLUDE;    
  11.     }    
  12.     @Override    
  13.     public int doEndTag() throws JspException {    
  14.         try {    
  15.             StringBuffer results = new StringBuffer("");    
  16.             if ("SEX".equals(collection)) {    
  17.                 results.append("請選擇");    
  18.                 results.append("男");    
  19.                 results.append("女");    
  20.             }    
  21.             pageContext.getOut().write(results.toString());    
  22.         } catch (IOException ex) {    
  23.             throw new JspTagException("錯誤");    
  24.         }    
  25.         return EVAL_PAGE;    
  26.     }    
  27.     // collection只是傳遞一個標(biāo)識,具體下拉值內(nèi)容是從數(shù)據(jù)庫取還是從請求中得到為不同具體實現(xiàn)    
  28.     protected String collection;    
  29.     public String getCollection() {    
  30.         return collection;    
  31.     }    
  32.     public void setCollection(String collection) {    
  33.         this.collection = collection;    
  34.     }    
  35. }   

具體你的字典數(shù)據(jù)從數(shù)據(jù)庫中如何存儲如何查詢,可以自定義實現(xiàn)

顯示的標(biāo)簽實現(xiàn),為了將來可以在頁面取到標(biāo)簽內(nèi)容值,我們定義隱藏域來保存屬性值,然后在顯示顯示內(nèi)容

 
 
 
  1. package com;    
  2. import java.io.IOException;    
  3. import javax.servlet.jsp.JspException;    
  4. import javax.servlet.jsp.JspTagException;    
  5. import javax.servlet.jsp.tagext.BodyTagSupport;    
  6. @SuppressWarnings("serial")    
  7. public class SelectDisplay extends BodyTagSupport {    
  8.     @Override    
  9.     public int doStartTag() throws JspException {    
  10.         try {    
  11.             StringBuffer results = new StringBuffer("");    
  12.             pageContext.getOut().write(results.toString());    
  13.         } catch (IOException ex) {    
  14.             throw new JspTagException("錯誤");    
  15.         }    
  16.         return EVAL_BODY_INCLUDE;    
  17.     }    
  18.     @Override    
  19.     public int doEndTag() throws JspException {    
  20.         try {    
  21.             StringBuffer results = new StringBuffer("");    
  22.             if ("SEX".equals(collection)) {    
  23.                 results.append("");    
  24.                 results.append("
  25.                 results.append("hidden\" name=\"");    
  26.                 results.append(getName());    
  27.                 results.append("\"");    
  28.                 results.append(" value=\"");    
  29.                 results.append(getValue());    
  30.                 results.append("\">");                   
  31.                 if ("1".equals(getValue())) {    
  32.                     results.append("男");    
  33.                 } else if ("2".equals(getValue())) {    
  34.                     results.append("女");    
  35.                 } else {    
  36.                     results.append("請選擇");    
  37.                 }    
  38.                 results.append("");    
  39.             }    
  40.             pageContext.getOut().write(results.toString());    
  41.         } catch (IOException ex) {    
  42.             throw new JspTagException("錯誤");    
  43.         }    
  44.         return EVAL_PAGE;    
  45.     }    
  46.     // collection只是傳遞一個標(biāo)識,具體下拉值內(nèi)容是從數(shù)據(jù)庫取還是從請求中得到為不同具體實現(xiàn)    
  47.     protected String collection;    
  48.     // 傳遞的值    
  49.     protected String value;    
  50.     // 該屬性的名稱    
  51.     protected String name;    
  52.     public String getCollection() {    
  53.         return collection;    
  54.     }    
  55.     public void setCollection(String collection) {    
  56.         this.collection = collection;    
  57.     }    
  58.     public String getName() {    
  59.         return name;    
  60.     }    
  61.     public void setName(String name) {    
  62.         this.name = name;    
  63.     }    
  64.     public String getValue() {    
  65.         return value;    
  66.     }    
  67.     public void setValue(String value) {    
  68.         this.value = value;    
  69.     }    
  70. }   

5、JSP中引用,直接在index.jsp中引用

需要引入相應(yīng)的標(biāo)簽內(nèi)容,引入的方式在JSP頭部引用

標(biāo)簽的屬性可以設(shè)置也可以不設(shè)置,標(biāo)簽的使用和HTML標(biāo)簽的使用是一樣的,定義屬性即可

 
 
 
  1. <%@ page language="java" pageEncoding="UTF-8"%>    
  2. <%@ taglib uri="/tld/web-html" prefix="html"%>    
  3.     
  4.     
  5.         
  6.         JSP 自定義標(biāo)簽的實現(xiàn)    
  7.         
  8.         
  9.         請選擇:    
  10.             
  11.                 
  12.             
  13.         顯示性別:    
  14.                  
  15.         
  16.   

6、后話

訪問項目就可以看到效果,附件是這個項目的源代碼,導(dǎo)入到MyEclipse中可以查看

如果想要自己設(shè)計一個大的標(biāo)簽庫,可以設(shè)計一個父類,包含一些主要的屬性,例如name,id,style等屬性。然后在子類中定義自己的特有屬性

這個實現(xiàn)只是學(xué)習(xí)一下JSP自定義標(biāo)簽使用的HelloWorld程序,然后包含了字典應(yīng)用的實際例子,程序簡單,僅供參考。

源代碼:jsptag.rar

原文鏈接:http://www.blogjava.net/todayx-org/archive/2012/01/30/369041.html

【編輯推薦】

  1. JSP自定義標(biāo)簽開發(fā)入門
  2. JSP速度優(yōu)化七種方法
  3. 詳細(xì)介紹Jsp中的Cookies
  4. 分享JSP學(xué)習(xí)經(jīng)驗總結(jié)
  5. 詳細(xì)介紹jsp中action的功能

當(dāng)前名稱:JSP自定義標(biāo)簽實現(xiàn)數(shù)據(jù)字典
網(wǎng)頁地址:http://www.5511xx.com/article/dhgpijd.html