1、SimpleTagSupport实现了SimpleTag接口
已经把所有的Tomcat传递的数据都保存起来,还提供get方法供子类调用----》》》
public class MyTag2 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().print(“再说一次WAN”);}}
页面:
2、有标签体的标签
标签体内容的可选值
元素的可选值有:
empty:无标签体
scriptless:标签体内容不能是java脚本,但可以是EL、JSTL等。在simpletag中,如果需要有标签体,那么就使用该选项
JSP:传统标签支持它,SimpleTag已经不再支持
JSP。标签体内容可以是任何东西:EL、JSTL、<%=%>、以及html。
tagdependent:标签体内容不做运算,由标签处理类自行处理,无论标签体内容是EL、JSP、JSTL,都不会做运算。
自定义有标签体的标签需要:
获取标签体对象:JspFragment、JspBody = getJspBody();
把标签体内容输出到页面:JspBody.invoke(null);
tld中指定标签内容类型:scriptless。
----》》》
public class MyTag3 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
Writer out = this.getJspContext().getOut();//获取当前jsp页面的输出流
out.write("***************
");
this.getJspBody().invoke(out);//执行标签体内容,把结果写到指定的流中,即页面上
out.write("
***************");}}
页面:
<%
request.setAttribute(“xxx”, “wxhnhhl”);
%>
${xxx }
3、不执行标签下面的页面内容
—》如果希望在执行了自定义标签后,不再执行JSP页面下面的东西,那么就需要在doTag()方法中使用SkipPageException
类:
public class MyTag4 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().print(“下面什么都没有!”);
throw new SkipPageException();//抛出这个异常后,再本标签后面的内容将看不到
}
}
页面:
4、有属性的标签
1、在标签处理类添加属性
为标签处理类添加属性,属性至少要有一个set方法,这个set方法会在doTag()方法之前被Tomcat执行,所在doTag()中就可以使用属性
2、在tld文件中对属性进行配置
指定属性名
制定属性是否为必需的
指定属性是否可以使用EL