1.如何自定义标签
1.创建一个类并实现SimpleTagSupport,重写doTag()方法
2.创建tld文件,这个文件需要放在WEB-INF下面,书写的方式按照c标签的方式
3.书写jsp使用自定义的标签
2.具体的实现
简介:这个例子是实现显示系统时间的标签
第一步:类里面的属性就是要外部传入的值,类比于:<c:if test=""> 这里的test就是和format类似
public class TestTag extends SimpleTagSupport {
//设置外部传入的参数默认值为:
private String format = "yyyy-MM-dd HH:mm:ss";
//以便外部调用setter方法给参数赋值,没有会出错
public void setFormat(String format) {
this.format = format;
}
@Override
public void doTag() throws JspException, IOException {
//创建时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(format);
String strDate = sdf.format(date);
//System.out.println("doTag()...");
//System.out.println(strDate);
//将时间输出给浏览器
/**
* 因为tomcat传递给标签的是pageContext,所以强转没问题
* pageContext:
* public abstract class PageContext extends JspContext
* 拥有了pageContext就可以获取到其他8大内置对象
*/
PageContext ctx = (PageContext) getJspContext();
JspWriter out = ctx.getOut();
try {
out.print("<p>Time:");
out.print(strDate);
out.print("</p>");
} catch (Exception e) {
e.printStackTrace();
}
//不能关闭流,因为其他地方也要使用这个流
//out.close();
}
}
第二步:这个里面在tag标签中的name标签就是:类比于:<c:if test=""> 中的if
<?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>this is show sysdate tage</description>
<display-name>My Define Date</display-name>
<tlib-version>1.0</tlib-version>
<short-name>td</short-name>
<!-- 随便写 -->
<uri>Web/WEB-INF/tdate.tld</uri>
<tag>
<!-- 标签描述 -->
<description>show sysdate</description>
<!-- 标签名 它就是类似于 <c:if> 的if-->
<name>tdate</name>
<!-- 标签类 -->
<tag-class>cn.web.tag.TestTag</tag-class>
<!-- 标签内容
eg:<c:if> 这里就是标签的内容 </c:if>
-->
<body-content>empty</body-content>
<attribute>
<!-- 属性的描述 -->
<description>date show format</description>
<!-- 属性的名称 -->
<name>format</name>
<!-- 属性是否必须 -->
<required>false</required>
<!-- 属性是否可以使用El -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
第三步:jsp在引用标签的时候的uri就是在定义tld文件的uri,prefix属性可以随便写
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="tdate" uri="Web/WEB-INF/tdate.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<tdate:tdate format="yyyy/MM/dd HH:mm:ss" />
</body>
</html>
运行!完成!