标签描述文件
引用:
<%@ taglib prefix="my" uri="/WEB-INF/tld/my.tld" %>
示例:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version><!-- 代表标签库的版本号 -->
<jsp-version>2.0</jsp-version><!-- 代表jsp的版本 -->
<short-name>my</short-name><!-- 你的标签库的简称 -->
<uri>http://my.com</uri><!-- 你标签库的引用uri -->
<tag>
<name>simple</name><!-- 你定义的标签的名称 -->
<tag-class>com.fyp.test.demo.web.tag.MySimpleTag</tag-class><!-- 对应的标签处理程序:包名+类名 -->
<body-content>empty</body-content><!-- 标签体内容的格式 -->
<attribute>
<name>param</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
body-content说明:
tagdependent:指定标签处理类自己负责处理标签体。
empty:指定该标签只能作用空标签使用。
scriptless:指定该标签的标签体可以是静态 HTML 元素,表达式语言,但不允许出现 JSP 脚本(这种是最常用的,不能出现的是jsp脚本,但是EL表达式和其他标签是可以用的)。
JSP:指定该标签的标签体可以使用 JSP 脚本。
attribute标签的rtexprvalue属性要注意下,这个属性置为true,参数才能接收EL表达式。
自定义标签开发
依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
java简单例子:
public class MySimpleTag extends SimpleTagSupport {
private String param;
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("Hello world! The param=" + param);
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
}
jsp简单例子:
<%@ taglib prefix="my" uri="/WEB-INF/tld/my.tld" %>
...
<my:simple param="123"/>
如果要带标签体,需要在描述文件里指定:
<body-content>scriptless</body-content>
java带标签体的例子:
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("<br>我是前缀,param=" + param + "<hr>");
getJspBody().invoke(null);
out.println("<br>我是后缀,param=" + param + "<hr>");
}
jsp带标签体的例子:
<my:simple param="123">
我是页面内容
</my:simple>