在JSP中用自定义标签实现集合的遍历—山寨版cforeach
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【文章标题】在JSP中用自定义标签实现集合的遍历——山寨版
【文章作者】曾健生
【作者邮箱】zengjiansheng1@
【作者QQ】190678908
******************************************************************************* 在JSTL中,标签
在编写自定义标签前,总要把实验环境搭建好^-^
首先,定义一个Person类,在实验的集合中就是存放这个类的实例,代码如下:package com.javaeye.newjueqi;
/**
*实验类Person
*/
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
既然是遍历集合,那么集合也是必须的,我们在测试页面TestMyELTag.jsp上写下如下的JSP代码,生成一个测试用途的集合ArrayList,集合中有三个元素
<%
//第1个人对象
Person p1=new Person();
p1.setName("Tom");
p1.setAge(23);
//第2个人对象
Person p2=new Person();
p2.setName("Mike");
p2.setAge(33);
//第3个人对象
Person p3=new Person();
p3.setName("Jack");
p3.setAge(43);
ArrayList list=new ArrayList();
list.add( p1 );
list.add( p2 );
list.add( p3 );
//把ArrayList存储在application
pageContext.setAttribute( "PersonList", list );
%>
在编写“山寨版”
${ } -- ${per.age }
图1
我们实现一个自定义的标签
效果如图1 所示
下面是正式的代码:
1.编写一个自定义的标签类。
/**
*完成模拟
*/
public void doTag() throws JspException, IOException {
// 定义一个迭代器
Iterator i=null;
//如果集合是Colleciton类型
if( items instanceof Collection )
{
//获取Collection的迭代器
i=( (Collection)items).iterator();
}
//如果集合是数组类型
else if( items instanceof Object[] )
{
//用Arrays的静态方法asList把数组转换为一个List集合,由于asList接受的参数
//是可变参数,所以为了防止转换出错必须要把传入的参数强制为数组
i=Arrays.asList((Object[])items).iterator();
}
else
{
throw new RuntimeException("不能转换");
}
//进行迭代
while( i.hasNext() )
{
//取得集合中迭代器指向的对象
Object obj=i.next();
//用setAttribute方法把对象和指定的变量连接起来
//例如标签中有属性var="per",标签体中有EL表达式式:$()
//写了下面的一句话后EL表达式就可理解为obj.getName(),表示调用的是
//对象相应的getXXX()
pageContext.setAttribute( var, obj );
//执行标签体的内容
jspFragment.invoke( null );
}
}