自定义标签
程序员文章站
2022-06-08 23:03:25
...
package com.fsti.tag;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class MyTagFor extends BodyTagSupport {
/**
* 这个里面定一个集合,我们不考虑数组的这个情况。
*/
private Collection items;
private String var;
private Iterator it;
public void setItems(Collection items) {
this.items = items;
}
public void setVar(String var) {
this.var = var;
}
/**
* 根据声明周期,我们知道,如果items为null或者说长度为0,我们就没有必要再继续这个标签体的方法了。所以,我们就可以在doStartTag方法中
* 直接跳出。
*/
@Override
public int doAfterBody() throws JspException {
// TODO Auto-generated method stub
if(it.hasNext())
{
this.pageContext.setAttribute(var,it.next());
return EVAL_BODY_AGAIN;// 这个返回值,是让方法继续循环执行方法
}
return SKIP_BODY;
}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
if( items == null || items.size() == 0)
{
return SKIP_BODY;//这个返回值在doStartTag方法和doAfterBody方法中可以起到直接结束当前方法的作用
}
it = items.iterator();
return EVAL_BODY_INCLUDE;//这个返回值,可以让我们的数据自然的保存在输出流中。并且继续下面的方法,这个返回值我们要特别的注意
}
}
<?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"> <tag> <name>for</name> <tag-class>com.fsti.tag.MyTagFor</tag-class> <body-content>JSP</body-content> <attribute> <name>items</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>var</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
上一篇: 在Vue项目中使用d3.js的实例代码
下一篇: Laravel框架自定义分页样式操作示例