知识大全 JSP自定义标签实现数据字典

Posted

篇首语:如果不能改变结果,那就完善过程。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JSP自定义标签实现数据字典相关的知识,希望对你有一定的参考价值。

JSP自定义标签实现数据字典  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   关于JSP标签的好处就不再罗嗦

  数据字典就是使用的下拉框 只要定义使用那个字典就会将这个字典可用的内容显示出来

  显示字典时只要定义那个字典和属性值就可以显示出字典的显示值

   首先在web xml中定义自定义标签加载的引用 两个属性分别是引用的URI和加载路径

  

  1. <?xml version=" " encoding="UTF "?>    
  2. <web app version=" " xmlns="
  3.     xmlns:xsi="
  4.     xsi:schemaLocation="
  5.     
  6.     <wele file list>    
  7.         <wele file>index jsp</wele file>    
  8.     </wele file list>    
  9.     <jsp config>    
  10.         <taglib>    
  11.             <taglib uri>/tld/web </taglib uri>    
  12.             <taglib location>    
  13.                 /WEB INF/tlds/web tld    
  14.             </taglib location>    
  15.         </taglib>    
  16.     </jsp config>    
  17. </web app>   

   在web tld中定义自己的标签 数据字典应用的话我们需要一个标签库 三个标签 分别是 select标签 options标签 和现实数据字典的标签 每个标签都对应不同的实现类

  

  1. <?xml version=" " encoding="UTF "?>    
  2. <!DOCTYPE taglib PUBLIC " //Sun Microsystems  Inc //DTD JSP Tag Library  //EN"      
  3.     "
  4. <taglib>    
  5.     <tlib version> </tlib version><!  标签库版本  >    
  6.     <jsp version> </jsp version>  <!  标签库要求的JSP规范版本  >    
  7.   &

   nbsp; <short name></short name>   <!  JSP页面编写工具可以用来创建助记名的可选名字  >    

  •     <tag>    
  •         <name>select</name>    
  •         <tag class> 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> OptionsTag</tag class>    
  •         <body content>JSP</body content>    
  •         <attribute>    
  •             <name>collection</name>    
  •             <rtexprvalue>true</rtexprvalue>    
  •         </attribute>    
  •     </tag>    
  •     <tag>    
  •         <name>selectDisplay</name>    
  •         <tag class> SelectDisplay</tag class>    
  •         <

   ;body content>JSP</body content>    

  •         <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标签内容 然后由JSP进行输出

  实现类最主要的两个方法 一个遇到这个标签开始时输出 一个是结束时输出

  如果需要定义属性 可以参考实现类定义属性 并在TLD中定义 在JSP中使用标签时快捷键就可以出来这个属性

  首先是select标签的代码

  

  1. package ;    
  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的区别:   
  8.  * 主要看标签处理类是否要读取标签体的内容和改变标签体返回的内容 如果不需要就用TagSupport 否则就用BodyTagSupport   
  9.  * 用TagSupport实现的标签 都可以用BodyTagSupport来实现 因为BodyTagSupport继承了TagSupport   
  10.  */    
  11. @SuppressWarnings("serial")    
  12. public class SelectTag extends BodyTagSupport     
  13.     @Override    
  14.     public int doStartTag() throws JspException     
  15.      &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 把Body读入存在的输出流中 doStartTag()函数可用   

  •     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() >执行下面的网页   
  •      */    
  •    

  关于返回参数 返回具体数字也可以 不用过于纠结

  然后是下拉内容实现类

  

  1. package ;    
  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("<optio

   n value=\\" \\"  selected=\\"selected\\">请选择</option>");    

  •                 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;    
  •         
  •    

  具体你的字典数据从数据库中如何存储如何查询 可以自定义实现

  显示的标签实现 为了将来可以在页面取到标签内容值 我们定义隐藏域来保存属性值 然后在显示显示内容

  

  1. package ;    
  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 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标签的使用是一样的 定义属性即可

      

    1. <%@ page language="java" pageEncoding="UTF "%>    
    2. <%@ taglib uri="/tld/web " prefix=""%>    
    3. <!DOCTYPE HTML PUBLIC " //W C//DTD HTML   Transitional//EN">    
    4. <>    
    5.     <head>    
    6.         <title>JSP 自定义标签的实现</title>    
    7.     </head>    
    8.     <body>    
    9.         请选择     
    10.         <:select name="sex" >    
    11.             <:options collection="SEX"></:options>    
    12.         </:select>    
    13.         显示性别  &nb
cha138/Article/program/Java/JSP/201311/20301

相关参考

知识大全 JSP自定义标签执行顺序

JSP自定义标签执行顺序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先来看一下简单标签接口

知识大全 JSP自定义标签开发入门

JSP自定义标签开发入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一般情况下开发jsp自定

知识大全 JSP自定义标签开发流程[1]

JSP自定义标签开发流程[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一概述  jsp(

知识大全 详细讲解JSP自定义标签

详细讲解JSP自定义标签  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 JSP自定义标签入门实例

JSP自定义标签入门实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!首先在eclipse下新建一

知识大全 JSP自定义标签开发流程[2]

JSP自定义标签开发流程[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下表引自Sun的j

知识大全 jsp简单自定义标签的forEach遍历及转义字符

jsp简单自定义标签的forEach遍历及转义字符  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!l

知识大全 Jsp中的自定义标签由浅到深详细讲解[4]

Jsp中的自定义标签由浅到深详细讲解[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  十四如

知识大全 Jsp中的自定义标签由浅到深详细讲解[2]

Jsp中的自定义标签由浅到深详细讲解[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  四创建

知识大全 Jsp中的自定义标签由浅到深详细讲解[1]

Jsp中的自定义标签由浅到深详细讲解[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一基本