數據字典就是使用的下拉框
顯示字典時只要定義那個字典和屬性值就可以顯示出字典的顯示值
- <?xml version="
" encoding="UTF "?> - <web
app version=" " xmlns=" - xmlns:xsi="
- xsi:schemaLocation="
- <welcome
file list> - <welcome
file>index jsp</welcome file> - </welcome
file list> - <jsp
config> - <taglib>
- <taglib
uri>/tld/web html</taglib uri> - <taglib
location> - /WEB
INF/tlds/web html tld - </taglib
location> - </taglib>
- </jsp
config> - </web
app>
- <?xml version="
" encoding="UTF "?> - <!DOCTYPE taglib PUBLIC "
//Sun Microsystems Inc //DTD JSP Tag Library //EN" - "
- <taglib>
- <tlib
version> </tlib version><! 標簽庫版本 > - <jsp
version> </jsp version> <! 標簽庫要求的JSP規范版本 > - &
nbsp; <short
- <tag>
- <name>select</name>
- <tag
class>com SelectTag</tag class> - <body
content>JSP</body content> - <attribute>
- <name>name</name>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <name>style</name>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- <tag>
- <name>options</name>
- <tag
class>com OptionsTag</tag class> - <body
content>JSP</body content> - <attribute>
- <name>collection</name>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- <tag>
- <name>selectDisplay</name>
- <tag
class>com SelectDisplay</tag class> - <
;body
- <attribute>
- <name>collection</name>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <name>name</name>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <name>value</name>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- </taglib>
實現類的作用就是在後台拼接所需HTML標簽內容
實現類最主要的兩個方法
如果需要定義屬性
首先是select標簽的代碼
- package com;
- import java
io IOException; - import javax
servlet jsp JspException; - import javax
servlet jsp JspTagException; - import javax
servlet jsp tagext BodyTagSupport; - /**
- * TagSupport與BodyTagSupport的區別:
- * 主要看標簽處理類是否要讀取標簽體的內容和改變標簽體返回的內容
如果不需要就用TagSupport 否則就用BodyTagSupport - * 用TagSupport實現的標簽
都可以用BodyTagSupport來實現 因為BodyTagSupport繼承了TagSupport - */
- @SuppressWarnings("serial")
- public class SelectTag extends BodyTagSupport {
- @Override
- public int doStartTag() throws JspException {
- &nb
sp; try {
- StringBuffer results = new StringBuffer("<select");
- if(name != null){
- results
append(" name=\""); - results
append(name); - results
append("\""); - }
- if(style != null){
- results
append(" style=\""); - results
append(style); - results
append("\""); - }
- results
append(">"); - pageContext
getOut() write(results toString()); - } catch (IOException ex) {
- throw new JspTagException("錯誤");
- }
- return EVAL_BODY_INCLUDE;
- }
- @Override
- public int doEndTag() throws JspException {
- try {
- StringBuffer results = new StringBuffer(""); &nbs
p;
- // 因為下拉中包含下拉內容
所以只能在遇到結束標簽時才能寫select結束 - results
append("</select>"); - pageContext
getOut() write(results toString()); - } catch (IOException ex) {
- throw new JspTagException("錯誤");
- }
- return EVAL_PAGE;
- }
- // 樣式
- protected String style;
- // 名字
- protected String name;
- public String getStyle() {
- return style;
- }
- public void setStyle(String style) {
- this
style = style; - }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this
name = name; - }
- /**
- doStartTag()方法是遇到標簽開始時會呼叫的方法
其合法的返回值是EVAL_BODY_INCLUDE與SKIP_BODY 前者表示將顯示標簽間的文字 後者表示不顯示標簽間的文字 - doEndTag()方法是在遇到標簽結束時呼叫的方法
其合法的返回值是EVAL_PAGE與SKIP_PAGE 前者表示處理完標簽後繼續執行以下的JSP網頁 後者是表示不處理接下來的JSP網頁 - doAfterBody()
這個方法是在顯示完標簽間文字之後呼叫的 其返回值有EVAL_BODY_AGAIN與SKIP_BODY 前者會再顯示一次標簽間的文字 後者則繼續執行標簽處理的下一步 - EVAL_BODY_INCLU
DE
- EVAL_PAGE
繼續處理頁面 doEndTag()函數可用 - SKIP_BODY
忽略對Body的處理 doStartTag()和doAfterBody()函數可用 - SKIP_PAGE
忽略對余下頁面的處理 doEndTag()函數可用 - EVAL_BODY_BUFFERED
申請緩沖區 由setBodyContent()函數得到的BodyContent對象來處理tag的body 如果類實現了BodyTag 那麼doStartTag()可用 否則非法 - EVAL_BODY_AGAIN
請求繼續處理body 返回自doAfterBody() 這個返回值在你制作循環tag的時候是很有用的 - 預定的處理順序是
doStartTag()返回SKIP_BODY doAfterBodyTag()返回SKIP_BODY doEndTag()返回EVAL_PAGE - 如果繼承了TagSupport之後
如果沒有改寫任何的方法 標簽處理的執行順序是 doStartTag() >不顯示文字 >doEndTag() >執行接下來的網頁 - 如果您改寫了doStartTag()
則必須指定返回值 - 如果指定了EVAL_BODY_INCLUDE
則執行順序是 doStartTag() >顯示文字 >doAfterBodyTag() >doEndTag() >執行下面的網頁 - */
- }
關於返回參數
然後是下拉內容實現類
- package com;
- import java
io IOException; - import javax
servlet jsp JspException; - import javax
servlet jsp JspTagException; - import javax
servlet jsp tagext BodyTagSupport; - @SuppressWarnings("serial")
- public class OptionsTag extends BodyTagSupport {
- @Override
- public int doStartTag() throws JspException {
- return EVAL_BODY_INCLUDE;
- }
- @Override
- public int doEndTag() throws JspException {
- try {
- StringBuffer results = new StringBuffer("");
- if ("SEX"
equals(collection)) { - results
append("<optio
n value=\"
- results
append("<option value=\" \">男</option>"); - results
append("<option value=\" \">女</option>"); - }
- pageContext
getOut() write(results toString()); - } catch (IOException ex) {
- throw new JspTagException("錯誤");
- }
- return EVAL_PAGE;
- }
- // collection只是傳遞一個標識
具體下拉值內容是從數據庫取還是從請求中得到為不同具體實現 - protected String collection;
- public String getCollection() {
- return collection;
- }
- public void setCollection(String collection) {
- this
collection = collection; - }
- }
具體你的字典數據從數據庫中如何存儲如何查詢
顯示的標簽實現
- package com;
- import java
io IOException; - import javax
servlet jsp JspException; - import javax
servlet jsp JspTagException; - import javax
servlet jsp tagext BodyTagSupport; - @SuppressWarnings("serial")
- public class SelectDisplay extends BodyTagSupport {
- @Override
- public int doStartTag() throws JspExce
ption {
- try {
- StringBuffer results = new StringBuffer("");
- pageContext
getOut() write(results toString()); - } catch (IOException ex) {
- throw new JspTagException("錯誤");
- }
- return EVAL_BODY_INCLUDE;
- }
- @Override
- public int doEndTag() throws JspException {
- try {
- StringBuffer results = new StringBuffer("");
- if ("SEX"
equals(collection)) { - results
append("<span>"); - results
append("<input type=\""); - results
append("hidden\" name=\""); - results
append(getName()); - results
append("\""); - results
append(" value=\""); - results
append(getValue()); - results
append("\">"); &nb
sp;
- if ("
" equals(getValue())) { - results
append("男"); - } else if ("
" equals(getValue())) { - results
append("女"); - } else {
- results
append("請選擇"); - }
- results
append("</span>"); - }
- pageContext
getOut() write(results toString()); - } catch (IOException ex) {
- throw new JspTagException("錯誤");
- }
- return EVAL_PAGE;
- }
- // collection只是傳遞一個標識
具體下拉值內容是從數據庫取還是從請求中得到為不同具體實現 - protected String collection;
- // 傳遞的值
- protected String value;
- // 該屬性的名稱
- protected String name;
- public String getCollection() {
- return collection;
-
} - public void setCollection(String collection) {
- this
collection = collection; - }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this
name = name; - }
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this
value = value; - }
- }
-
JSP中引用 直接在index jsp中引用 需要引入相應的標簽內容
引入的方式在JSP頭部引用 標簽的屬性可以設置也可以不設置
標簽的使用和HTML標簽的使用是一樣的 定義屬性即可 - <%@ page language="java" pageEncoding="UTF
"%> - <%@ taglib uri="/tld/web
html" prefix="html"%> - <!DOCTYPE HTML PUBLIC "
//W C//DTD HTML Transitional//EN"> - <html>
- <head>
- <title>JSP 自定義標簽的實現</title>
- </head>
- <body>
- 請選擇
- <html:select name="sex" style="width:
px"> - <html:options collection="SEX"></html:options>
- </html:select>
- 顯示性別
&nb
sp;
- <%@ page language="java" pageEncoding="UTF
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20301.html