JSP 自定义标签tld --迭代器标签

要想定义标签;

首先定义一标签处理类

IteratorTag.java 代码:

package com.yd.tag;


import java.io.IOException;
import java.util.Collection;


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


public class IteratorTag extends SimpleTagSupport {
// 标签属性,用于指定需要被迭代的集合
private String collection;
// 标签属性,指定迭代集合元素,为集合元素指定的名称
private String item;


// collection的setter和getter方法
public void setCollection(String collection) {
this.collection = collection;
}


public String getCollection() {
return this.collection;
}


// item的setter和getter方法
public void setItem(String item) {
this.item = item;
}


public String getItem() {
return this.item;
}


// 标签的处理方法,标签处理类只需要重写doTag()方法
public void doTag() throws JspException, IOException {
// 从page scope中获取名为collection的集合
Collection itemList = (Collection) getJspContext().getAttribute(
collection);
// 遍历集合
for (Object s : itemList) {
// 将集合的元素设置到page范围内
getJspContext().setAttribute(item, s);
// 输出标签体
getJspBody().invoke(null);
}
}
}

自定义标签tld 在处理类中应注意: 带有属性必有setter和getter ; 一定要重写doTag();

接下来在WEB-INF/ 新建一个文件mytaglib.tld



xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
1.0
mytaglib

http://www.zyd.org/mytaglib



iterator

com.yd.tag.IteratorTag

scriptless


collection 
true
true



item 
true
true




配置注意:

1.必须有唯一的指定该标签库的URI(唯一标识)

2.taglib 可以有多个节点,每个对应一个标签处理类

3.处理类中有多少属性就有多少个


接下来测试在JSP使用该标签的效果 

iteratorTag.jsp 代码 :

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ page import="java.util.*"%>

<%@ taglib uri="http://www.zyd.org/mytaglib" prefix="mytag"%>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


带标签体的标签-迭代器标签



带标签体的标签-迭代器标签



<%
//创建一个List对象
List a = new ArrayList();
a.add("Hello Java");
a.add("www.zyd.org");
a.add("www.kitty.org");
//将List对象放入page范围内
pageContext.setAttribute("a" , a);
%>







${pageScope.item}



总结:此次JSP自定义标签貌似没什么作用(字符串添加到ArrayList,然后使用IteratorTag标签进行迭代);

但我们可以这么想Servlet把数据放入Request里,JSP再通过标签输出。

你可能感兴趣的:(Java,EE)