JSP自定义标签-迭代

1 JSP自定义标签进行迭代

我们可以使用IterationTag接口的doAfterBody()方法来迭代任何标签的主体内容。

下面示例中,我们将使用实现IterationTag接口的TagSupport类。为了迭代主体内容,我们需要在doAfterBody()方法中使用EVAL_BODY_AGAIN常量。

2 JSP自定义标签迭代示例

在下面示例中,我们将在自定义标签中使用属性,该属性用于设置遍历的次数。

2.1 编写标签处理程序

LoopRecord:

package com.yiidian;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class LoopRecord extends TagSupport{
    private int number;
    private int counter;

    public void setNumber(Integer number) {
        this.number = number;
    }

    public int doStartTag() throws JspException {
        return EVAL_BODY_INCLUDE;
    }

    public int doAfterBody() {
        counter++;
        if (counter==number)
            return SKIP_BODY;
        else
            return EVAL_BODY_AGAIN;
    }

    public int doEndTag() throws JspException {
        return EVAL_PAGE;
    }
}

2.2 编写mytags.tld

mytags.tld:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

    <tlib-version>1.2</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>c</short-name>
    <uri>yiidian.com</uri>

    <tag>
        <name>loopRecord</name>
        <tag-class>com.yiidian.LoopRecord</tag-class>
        <attribute>
            <name>number</name>
            <required>true</required>
        </attribute>

    </tag>
</taglib>

2.3 编写index.jsp

index.jsp:

<%@ page language="java" contentType="text/html;charset=utf-8" %>
<%@ taglib uri="yiidian.com" prefix="y" %>
<html>
<html>
<head>
    <meta charset="utf-8">
    <title>一点教程网-带属性的JSP自定义标签输出数据库记录</title>
</head>
<body>

<y:loopRecord number="5">
    一点教程网<br/>
</y:loopRecord>

</body>
</html>

2.4 运行测试

推荐好课