自定义标签的开发及使用自定义标签实现迭代foreach循环

来源:互联网 发布:siri算不算人工智能 编辑:程序博客网 时间:2024/05/16 01:16

    在JSP2中,规范简化了标签库的开发,在JSP2中开发自定义标签只需如下三个步骤:

   一、开发自定义标签处理类

   二、建立一个*.tld文件

   三、在JSP文件中使用自定义标签

   自定义标签类应该继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,JSP自定义标签类还有如下要求:

   一、如果标签类包含属性,每个属性都需要提供对应的getter和setter方法

   二、重写doTag()方法,这个方法负责生成页面内容

   下面开始标签的开发:

  一、开发自定义标签处理类 ForeachTag,实现迭代List集合,数组的功能

public class ForeachTag extends SimpleTagSupport {
    // 标签属性
    private String items;
    private String var;
   //这里省略 getter setter方法

    @Override
    public void doTag() throws JspException, IOException {
        Iterator ite = null;
        Object tempItem = getJspContext().getAttribute(items);
        // 如果是集合
        if (tempItem instanceof Collection) {
            ite = ((Collection) tempItem).iterator();
        }
        // 如果是数组
        else if (tempItem instanceof Object[]) {
            ite = Arrays.asList((Object[]) tempItem).iterator();
        } else {
            throw new RuntimeException("不能转换");
        }
        // 进行迭代
        while (ite.hasNext()) {
            Object obj = ite.next();
            getJspContext().setAttribute(var, obj);
            //输出标签体
            getJspBody().invoke(null);
        }
    }

}

 二、开发*.tld文件。在web-inf目录下新建mytaglib.tld文件,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>this is my tag library Definition</description>
    <tlib-version>1.0</tlib-version>
    <short-name>mytaglib</short-name>
    <uri>http://127.0.0.0/servlet/mytaglib</uri>

      <tag>
        <name>foreach</name>
        <tag-class>taglib.ForeachTag</tag-class>
        <body-content>scriptless</body-content>

       <!-- 指定foreach循环中的items属性和var属性 -->
        <attribute>
            <name>items</name>
            <required>true</required>
            <fragment>true</fragment>
        </attribute>
        <attribute>
            <name>var</name>
            <required>true</required>
            <fragment>true</fragment>
        </attribute>
    </tag>

</taglib>

三、开发JSP,并在JSP中使用自定义的标签实现list集合的迭代

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="" %>
<%@page import="java.util.*" %>
<%@taglib uri="http://127.0.0.0/servlet/mytaglib" prefix="mytag" %>
<%
    List<String> lists=new ArrayList<String>();
    lists.add("疯狂Java讲义");
    lists.add("轻量级JavaEE企业级应用");
    lists.add("疯狂Ajax讲义");
    pageContext.setAttribute("lists",lists);
    
    String[] ary=new String[3];
    ary[0]="A";
    ary[1]="B";
    ary[2]="C";
    pageContext.setAttribute("ary",ary);
%>
<html>
    <head>
        <title>自定义标签-仿foreach标签 功能:循环List集合,一维数组</title>
    </head>
    <body>
        <h3>这里迭代的是集合</h3>
        <table style="border:solid 1px black; width=400xp;">
            <mytag:foreach items="lists" var="item">
                <tr>
                    <td>${item }</td>
                </tr>
            </mytag:foreach>
        </table>
        <br />
        <h3>这里迭代的是数组</h3>
        <mytag:foreach items="ary" var="item">
            ${item }&nbsp;
        </mytag:foreach>
        
    </body>
</html>

JSP文件中需注意的问题:使用<%@taglib %>导入自定义开发的标签,uri路径与mytaglib.tld文件中指定的uri路径相同


原创粉丝点击