在JSP中用自定义标签实现集合的遍历—山寨版cforeach

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 }

是循环控制,可以将集合中的成员循序遍历一遍,运行方式为条件符合时,将会重复执行的本体内容。

中的属性的含义:items是被迭代的集合对象,var是用来存放现在指向的成员,上面的代码运行后的结果如图1所示:

图1

我们实现一个自定义的标签,模拟实现的功能,用法如下:

${ } -- ${per.age }

效果如图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 );

}

}

相关文档
最新文档