一、开发自定义标签处理类
二、建立一个*.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 } </mytag:foreach> </body> </html>JSP文件中需注意的问题:使用<%@taglib %>导入自定义开发的标签,uri路径与mytaglib.tld文件中指定的uri路径相同