一、foreach标签
思路:
分析foreach的属性:items,var
分析线路:
第二条:eval_body_include
第三条:EVAL_BODY_AGAIN
案例:foreach的应用
Foreach .java
package com.cxy.tag;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**foreach
* 分析有两个属性
* items:List<object>
* var:string
*
* 分析线路
* 第二条:eval_body_include
* 第三条:EVAL_BODY_AGAIN
* @author zjjt
*
*/
public class Foreach extends BodyTagSupport{
private String var;
private List<Object> items;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public List<Object> getItems() {
return items;
}
public void setItems(List<Object> items) {
this.items = items;
}
@Override
public int doStartTag() throws JspException {
Iterator<Object> it = items.iterator();
//var = c,it.next()是集合中的某个对象
pageContext.setAttribute(var, it.next());
pageContext.setAttribute("it", it);//为了保留迭代之指针现有指针位置
return EVAL_BODY_INCLUDE;
}
@Override
public int doAfterBody() throws JspException {
Iterator<Object> it = (Iterator<Object>) pageContext.getAttribute("it");
if(it.hasNext()) {
pageContext.setAttribute(var, it.next());
pageContext.setAttribute("it", it);//为了保留迭代之指针现有指针位置
return EVAL_BODY_AGAIN;
}
else {
return EVAL_PAGE;
}
}
}
caoxy.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>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>z</short-name>
<uri>http://jsp.veryedu.cn</uri>
<validator>
<description>
Provides core validation features for JSTL tags.
</description>
<validator-class>
org.apache.taglibs.standard.tlv.JstlCoreTLV
</validator-class>
</validator>
<tag>
<!-- 代表标签库标签的名字 -->
<name>demo1</name>
<!-- 该标签对应的助手类 -->
<tag-class>com.cxy.tag.DemoTag</tag-class>
<!-- 代表是一个jsp标签 -->
<body-content>JSP</body-content>
<attribute>
<!-- 该自定义jsp标签的属性名称 -->
<name>var</name>
<