二、控制标签体是否执行:
其实就是执行开始标签,这个时候就启动了doStartTag()方法,要是执行标签体,把返回值设置成,return Tag.EVAL_BODY_INCLUDE;,要是不执行标签体就把返回值设置成return Tag.SKIP_BODY;这个时候在配置tld文件是要注意。
<tag> <name>demo2</name> <tag-class>cn.tag.Demo2</tag-class> <body-content>JSP</body-content> </tag>
这样的话就在jsp文件中才有标签体,然后在标签体中添加内容。
<fns:demo2> aaaaaaaa </fns:demo2>
三、是否执行余下的jsp内容。
要执行余下的jsp内容,这些余下的jsp内容在标签体的后面,所以及复写doEndTag()方法,如果不执行余下的部分,那么就返回return Tag.SKIP_PAGE,要是执行余下的部分就返回return Tag.EVAL_PAGE;
public int doEndTag() throws JspException {
return Tag.SKIP_PAGE;
}
四、循环输出要执行的内容:
这个就要用到另外一个IterationTag接口来处理循环了,这个接口就是Tag接口的子接口,它也有默认实现类,其实就是TagSupport类。
1、Java类如下
package cn.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.IterationTag;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 循环输出5次
* Porject Name:tag
* File Name:Demo4.java
* Description:
* Author:zhangjl
* Date:2014-1-13
* Copyright (c) 2014,web_bckf@126.com All Rights Reserved.
*/
public class Demo4 extends TagSupport {
int count = 5;
/*
* 执行开始标签
*
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
return Tag.EVAL_BODY_INCLUDE;
}
@Override
public int doAfterBody() throws JspException {
count--;
if (count > 0) {
return IterationTag.EVAL_BODY_AGAIN;
} else {
return IterationTag.SKIP_BODY;
}
}
}
注意
Tag.EVAL_BODY_INCLUDE和IterationTag.EVAL_BODY_AGAIN的区别,第一个是执行一次,而另外一个是重复执行标签
然后将Java文件引入到tld文件中,然后在jsp文件中引用tld文件。