目录
一、前言
1.1 前言:
上上次文章我们一起探索了如何自定义Jsp标签,并且还一起实践了if、set以及out标签的制作;
而相信对于看了上上篇文章的伙伴们对于自定义标签已经是有了一些的了解跟实践,而Leaf今天这篇文章也就是想接着和大家一起来自定义两个标签:forEach&select,逐渐学会了自定义标签并且融洽实践后会对我们以后的开发中带来不小的帮助,可以节约不少的开发时间,好了,话不多说,开展我们的代码探索之旅吧!
二、自定义forEah标签
2.1 建立ForEachTag标签类,继承BodyTagSupport类
package com.leaf.tag;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* ForEach标签
* @author Leaf
*
* 2022年6月21日 上午8:37:51
*/
public class ForEachTag extends BodyTagSupport {
}
2.2 分析ForEachTag标签的属性
/**
* ForEach标签
* <c:forEach items="${stus }" var="s">
* 分析会有两个属性:
* items:List<Object>
* var:String
* 分析线路返回值:
* 第二条:eval_body_include
* 第三条:eval_body_again
* @author Leaf
*
* 2022年6月21日 上午8:37:51
*/
2.3 编写ForEachTag标签类
根据forEach标签的特性,我们使用迭代器来进行遍历;
ForEachTag标签类完整代码:
package com.leaf.tag;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* ForEach标签
* <c:forEach items="${stus }" var="s">
* 分析会有两个属性:
* items:List<Object>
* var:String
* 分析线路返回值:
* 第二条:eval_body_include
* 第三条:eval_body_again
* @author Leaf
*
* 2022年6月21日 上午8:37:51
*/
public class ForEachTag extends BodyTagSupport {
private List<Object> items;//数据源
private String var;//代表数据源的每一个对象
public List<Object> getItems() {
return items;
}
public void setItems(List<Object> items) {
this.items = items;
}
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
//开始标签
@Override
public int doStartTag() throws JspException {
//迭代器
Iterator<Object> it = items.iterator();
//为了保留迭代时指针现有位置
pageContext.setAttribute("it", it);
return EVAL_BODY_INCLUDE