jstl自定义标签

来源:互联网 发布:mysql 字符转日期函数 编辑:程序博客网 时间:2024/06/08 10:43

<span style="font-size:14px;">用过jstl和el表达式的人都觉得这个用起来很方便,今天我要说的不是怎么用它,而是怎么自定义一个jstl标签!写一个jstl标签其实很简单,它的底层都是通过java写一个方法实现相应的功能,然后将其封装成一个jar包,需要时调用即可。</span>

我以输出格式化后的时间作为自定义jstl标签的案例来讲解具体的步骤,首先要在WEB-INF目录下建一个xxx.tld文件,我的是yctaglibs.tld文件。按照官方给出的c.tld文件写。先上代码,然后再进行讲解。

<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"    version="2.1">      <description>yc standard tag lib</description>  <display-name>yc tag lib</display-name>  <tlib-version>1.0</tlib-version>  <short-name>yc</short-name>  <uri>http://www.hyycinfo.com/taglib/yc</uri>  <tag> <name>time</name> <tag-class>com.yc.web.taglibs.TimeTag</tag-class> <body-content>empty</body-content> <attribute> <!-- 属性名 -->        <name>format</name>        <!-- 是否是必填字段 -->        <required>false</required>        <!-- 是否支持el表达式 -->        <rtexprvalue>false</rtexprvalue>    </attribute>  </tag></taglib></span>
上述代码中 第一行声明以及taglib中的参数都必须按照 官方给出的c.tld文件写,最好是复制粘提,避免出错。

description 描述 

diaplay-name 展示名字  

tlib-version  版本号

short-name 简名

uri 标签文件的访问路径  (重要)在jsp页面中访问时需要这个地址

<tag></tag>之间

tag-class:自定义的标签类的全称

body-content:自定义标签是否有标签体内容  (empty:没有  JSP:有)

attribute:标签的属性


接着写自定义标签的类TimeTage.java

<span style="font-size:14px;">package com.yc.web.taglibs;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;public class TimeTag extends TagSupport {private String format="";@Overridepublic int doStartTag() throws JspException {Date d=new Date();//在页面输出 (用流)//PrintWriter out=null;JspWriter out=null;try {//得到  响应对象 取出流//out = super.pageContext.getResponse().getWriter();//jsp标准流,按照http协议输出out=super.pageContext.getOut();if(format!=null && !"".equals(format)){SimpleDateFormat sdf=new SimpleDateFormat(format);out.write(sdf.format(d));out.flush();}else{out.write(d+"");out.flush();}} catch (IOException e) {e.printStackTrace();}//out.close();return super.SKIP_BODY;}public void setFormat(String format) {this.format = format;}}</span>
在这个类中要输出就必须获取流,获取流有两种方式:第一种就是通过响应对象获得流,第二种是jsp标准流。前者在页面输出时,html标签无效,如换行不会有;而后者则不会出现这种情况,因为后是遵循http协议输出。我个人的理解就是,用前者输出时,先输出,然后才会读取其他html标签元素。这个在jsp编译成xxx.java文件中可以很容易看出,而后者在编译后的java文件中不会出现这种情况。

最后一步就是index.jsp页面了,在声明语句之后,引用自定义标签的类

<span style="font-size:14px;"><%@ taglib prefix="yc" uri="http://www.hyycinfo.com/taglib/yc"%></span>
第一个引用的是自定义的标签,uri就是在yctaglibs.tld定义的地址

<span style="font-size:14px;"><span style="white-space:pre"></span><!-- 输出当前时间 --><yc:time /><hr /><yc:time format="yyyy年MM月dd日" /><hr /></span>
写到这里,自定标签已经写完了,具体结果如下:



相信看到这里, 大家对自定义标签有了一定的了解,那么赶紧行动起来,自己写一个自定义标签!


0 0
原创粉丝点击