自定义标签(三)

二、控制标签体是否执行:

        其实就是执行开始标签,这个时候就启动了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,[email protected] 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文件。

 

 

你可能感兴趣的:(自定义标签)