自定义标签

本文介绍了一个自定义的JSP标签——MyTagFor,该标签用于在JSP页面中进行迭代操作。通过设置items属性指定要遍历的集合,并使用var属性定义每次迭代时的变量名。文章详细解释了标签的实现原理及其生命周期中的关键方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.fsti.tag;

import java.util.Collection;
import java.util.Iterator;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class MyTagFor extends BodyTagSupport {
	/**
	 * 这个里面定一个集合,我们不考虑数组的这个情况。
	 */
	private Collection items;	
	private String var;
	private Iterator it;
	
	public void setItems(Collection items) {
		this.items = items;
	}
	public void setVar(String var) {
		this.var = var;
	}
	/**
	 * 根据声明周期,我们知道,如果items为null或者说长度为0,我们就没有必要再继续这个标签体的方法了。所以,我们就可以在doStartTag方法中
	 * 直接跳出。
	 */
	
	@Override
	public int doAfterBody() throws JspException {
		// TODO Auto-generated method stub
		
		if(it.hasNext())
		{
			this.pageContext.setAttribute(var,it.next());
			return EVAL_BODY_AGAIN;// 这个返回值,是让方法继续循环执行方法 
		}		
		return SKIP_BODY;
	}
	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		
		if( items == null || items.size() == 0)
		{
			return SKIP_BODY;//这个返回值在doStartTag方法和doAfterBody方法中可以起到直接结束当前方法的作用
		}				
		it = items.iterator();	
		return EVAL_BODY_INCLUDE;//这个返回值,可以让我们的数据自然的保存在输出流中。并且继续下面的方法,这个返回值我们要特别的注意
	}	
}
 
<?xml version="1.0" encoding="UTF-8" ?>  
<taglib xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
    version="2.1">  
<tag>
    <name>for</name>
    <tag-class>com.fsti.tag.MyTagFor</tag-class>
    <body-content>JSP</body-content>
   	<attribute>
        <name>items</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
        <name>var</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值