首先说下列表标签是什么意思呢,列表标签就是循环一个集合,把其中的元素都展现在一个表格中。比如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.接着我们编写标签的描述文件:
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">
1.0
javaTag
iterate
com.java.tag.IterateTag
JSP
var
true
true
items
true
true
3.在jsp页面引入标签:
pageEncoding="UTF-8"%>
Insert title hereList people=new ArrayList();
people.add("张三");
people.add("李四");
people.add("王五");
pageContext.setAttribute("people", people);//将集合赛进pageContext中
%>