标签:
自定义标签需要实现SimpleTag接口,在定义标签的时候,只需要实现该接口的几个方法就可以了.
在调用自定义标签的时候,会默认调用者几个方法.而且执行是有顺序的,顺序就是上面这个样子.
其中:
JspFragment代表某个对象中的部分JSP代码,在simpleTag接口中,就是JSP标签的正文部分.
JspFragment对象中有一个void invoke(Writer out)
可以执行该片段,并将所有输出定向到给定 Writer,如果 out 为 null,则将输出定向到与该片段关联的 JspContext 的 getOut() 方法返回的 JspWriter
S1:实现一个类
java ee提供了一个SimpleTag的实现类,在使用的时候,可以直接继承这个类,然后选择需要的方法重写就可以了.
package userDefinedJspTag;
import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class TagDemo1 extends SimpleTagSupport {
private PageContext pc;
@Override
public void setJspContext(JspContext pc) {
this.pc = (PageContext) pc;
}
@Override
public void doTag() throws JspException, IOException {
pc.getOut().print("hello");
}
}
S2:编辑TLD配置文件
跟自定义el函数差不多,只是这里使用的是tag标签.
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://www.thecatcher/mytag</uri>
<!-- 配置自定义标签 -->
<tag>
<name>printHi</name>
<tag-class>userDefinedJspTag.TagDemo1</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
S3:JSP文件中引入并使用
...
<%@ taglib uri="http://www.thecatcher/mytag" prefix="mytag"%>
...
<mytag:printHi/>
带有主体的标签,跟不带主题的标签差不多.
doTag()方法里,声明一个JspFragment,然后invoke一下就可以了
public void doTag() throws JspException, IOException {
JspFragment jf = this.getJspBody();
// jf.invoke(pc.getOut());
//把这里写成null的话,服务器底还是会自动给丫传入一个out的.
jf.invoke(null);
}
TLD的配置也有点不同,body-content这里不能再写empty了.
body-content有四个值可选:
使用EL表达式,jsp标签的主要目的就是减少java代码的使用. 所以带主体的标签最常用的这个属性就是scriptless.
<tag>
<name>out</name>
<tag-class>userDefinedJspTag.TagDemo2</tag-class>
<body-content>scriptless</body-content>
</tag>
使用的时候也很简单,这样就可以了. <mytag:out>你好啊.</mytag:out>
标签:
原文地址:http://www.cnblogs.com/thecatcher/p/5755174.html