自定义列表标签

首先说下列表标签是什么意思呢,列表标签就是循环一个集合,把其中的元素都展现在一个表格中。比如XXXX标签,XXX标签将在后面写,这里不能说太多,大家都明白就没意思了哈哈哈哈。那么他的原理是很么呢?就是循环输出集合中的数据咯。

好吧,还是上代码更有说服力。

1.我们先写一个类:、

package com.java.tag;

import java.util.Iterator;
import java.util.List;

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

public class IterateTag extends TagSupport{

/**
*
*/
private static final long serialVersionUID = 1L;

private String var;//将集合中的每一个元素赋值给var,
private String items;//
private Iterator iter;//吧集合转换成Iterator

public String getVar() {
return var;
}

public void setVar(String var) {
this.var = var;
}

public String getItems() {
return items;
}

public void setItems(String items) {
this.items = items;
}

public Iterator getIter() {
return iter;
}

public void setIter(Iterator iter) {
this.iter = iter;
}

@Override
public int doStartTag() throws JspException {//开始标签
Object value=this.pageContext.getAttribute(items);//拿到属性为Iterms的属性集合,页面中的标签已规定
if(value!=null && value instanceof List){//如果value是List、类型
this.iter=((List)value).iterator();//转换为Iterator
if(iter.hasNext()){//如果iterator里面有值
this.pageContext.setAttribute(var, iter.next());//把该值塞进var中
return TagSupport.EVAL_BODY_INCLUDE; // 执行标签体-将值显示出来
}else{
return TagSupport.SKIP_BODY; // 退出标签执行
}
}else{
return TagSupport.SKIP_BODY; // 退出标签执行
}
}

@Override
public int doAfterBody() throws JspException {//退出标签体
if(iter.hasNext()){//再次判断iterator里面是否有值,如果有值
this.pageContext.setAttribute(var, iter.next());//将值赛进var
return TagSupport.EVAL_BODY_AGAIN; // 再执行一次标签体
}else{
return TagSupport.SKIP_BODY; // 退出标签执行
}
}

}

2.接着我们编写标签的描述文件:

<?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">
<tlib-version>1.0</tlib-version>
<short-name>javaTag</short-name>

<tag>

<!--标签名称-->
<name>iterate</name>
<tag-class>
com.java.tag.IterateTag
</tag-class>

<!--标签体-->
<body-content>JSP</body-content>

<!--设置标签的var属性-->
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>

<!---设置标签的iterms属性--->
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

</tag>

</taglib>

 

3.在jsp页面引入标签:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib prefix="java" uri="/WEB-INF/java.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%
List people=new ArrayList();
people.add("张三");
people.add("李四");
people.add("王五");
pageContext.setAttribute("people", people);//将集合赛进pageContext中
%>
</head>
<body>
<java:iterate items="people" var="p">
<h2>${p }</h2>
</java:iterate>
</body>
</html>

posted @ 2017-02-23 23:06  小拽A  阅读(2142)  评论(0编辑  收藏  举报