首页 > 代码库 > 自定义标签(JSTL)

自定义标签(JSTL)

自定义标签的步骤:

  1、确定需求,如:用<my:date/>输出当前时间

  2、编写Java类:需要实现实现接口javax.servlet.jsp.tagext.JspTag

          具体的接口为:

              javax.servlet.jsp.tagext.SimpleTag,简单标签,JSP2.0**
                      javax.servlet.jsp.tagext.Tag,经典标签

 

  3、编写tdl文件(xml)

 

Demo:

 1 public class MyTag implements SimpleTag { 2      3     private PageContext pageContext; 4     public void setJspContext(JspContext pc) { 5          6         this.pageContext=(PageContext) pc;//设置pageContext 7     } 8      9     public void doTag() throws JspException, IOException {10         11         SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss:SSS");12         String date=format.format(new Date());13         pageContext.getOut().print(date);//输出到页面14     }15 16     public JspTag getParent() {17         // TODO Auto-generated method stub18         return null;19     }20 21     public void setJspBody(JspFragment arg0) {22         // TODO Auto-generated method stub23         24     }


 1 <?xml version="1.0" encoding="UTF-8" ?> 2  3 <taglib xmlns="http://java.sun.com/xml/ns/javaee" 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 6     version="2.1">

    <!-- 确定当前标签库的版本 --> 7 <tlib-version>1.0</tlib-version> 8 <short-name>my</short-name> <!-- 建议引入当前便签库是,使用的简写--> 9 <uri>http://www.cnblogs.com/liuwt365/mytag</uri> <!-- 为当前标签库配置文件,起一个名称        * 内容:自定义,全球唯一         -->10 11 <tag>12 <name>date</name> <!-- 确定标签名称 -->13 <tag-class>cn.test.simpleTag.MyTag</tag-class> <!-- 确定实现类 -->14 <body-content>empty</body-content> <!-- 格式化当前标签的body内容-->15 </tag>16 17 </taglib>
1 <%@ taglib uri="http://www.cnblogs.com/liuwt365/mytag" prefix="my" %>   <!--  页面注册  -->2 3 <my:date/>

PS:如果标签中含有属性,则tdl中需要设置:<my:maxValue num1="13" num2="15"></my:maxValue>

  

 1 <tag> 2         <name>max</name> 3         <tag-class>cn.test.simpleTag.MyMaxTag</tag-class> 4         <body-content>empty</body-content> 5         <attribute> 6             <name>num1</name> 7             <required>true</required> 8             <rtexprvalue>true</rtexprvalue> 9             <type>java.lang.Integer</type>10         </attribute>11         12         <attribute>//设置属性13             <name>num2</name>//属性名14             <required>true</required>//是否必须  true|false    (yes|no)(非必须)15             <rtexprvalue>true</rtexprvalue>  //runtime expression value  运行时表达式16             <type>java.lang.Integer</type>   //类型(非必须)17         </attribute>18     </tag>

  如果含有标签体,tdl中设置如下:<my:toUpper>JUHjdksds</my:toUpper>

<tag>        <name>toUpper</name>        <tag-class>cn.test.simpleTag.MyToUpperTag</tag-class>        <body-content>scriptless</body-content>

<!-- 确定标签体的类型
            * empty:没有标签体
            * JSP:支持JSP所有的语法,在Tag中使用
            * scriptless:对于JSP页面的脚本不支持 <%%>
            * tagdependent:标签体不做处理,原样输出
-->
</tag>

如果含有标签体 ,java类中的

1 public void setJspBody(JspFragment jf) {2         this.jspFragment=jf;   //获取     3     }

向jsp页面输出时

1 StringWriter stringWriter=new StringWriter();//获得流2         3         this.jspFragment.invoke(stringWriter);//将数据写入到流中4         String data=http://www.mamicode.com/stringWriter.toString().toUpperCase();5         6         this.pageContext.getOut().print(data);7         
this.jspFragment.invoke(pageContext.getOut())=this.jspFragment.invoke();

自定义标签(JSTL)