Taglib 原理和实现:第四章 循环的Tag

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

第四篇 支持循环的Tag

1。问题:在request里的 People 对象,有个属性叫 men ,men 是一个Collection ,有许多个man 。现在,把 collection里的man的名字都显示出来

显然,这是一个嵌套Tag的问题。有三个Tag互相作用:最外层的Tag找到People对象,中间的Tag取得Collection,子Tag负责打印。

例如:

<diego:withObject value="${people}">

<diego:withCollection property="men">

<diego:elementout property="name"/>

</diego:withCollection>

</diego:withObject>

思路如下:

1.编写WithObjectTag,负责从El表达式中取得对象

2.编写WithCollectionTag,负责从对象中取得 Collection ,遍历 Collection ,每遍历一次 Collection ,执行一次body

3.编写ElementoutTag ,把 Collection 中每个men对象的 name 打印出来

2. 完整程序如下:

在上例的diegoyun.vo包内,编写 People 类

package diegoyun.vo;

import Java.util.Collection;

public class People

{

private Collection men = null;

public Collection getMen()

{

return men;

}

public void setMen(Collection men)

{

this.men = men;

}

}

编写 withObject ,这是从request里取得People对象的最外层Tag

package diegoyun;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.taglibs.standard.lang.support.EXPressionEvaluatorManager;

public class WithObjectTag extends BodyTagSupport

{

private Object value = null;

public Object getValue()

{

return value;

}

public void setValue(Object value)throws JspException

{

this.value = ExpressionEvaluatorManager.evaluate(

"value", value.toString(), Object.class, this, pageContext);

}

public int doStartTag()

{

return EVAL_BODY_INCLUDE;

}

public int doEndTag()throws JspException

{

return EVAL_PAGE;

}

}

编写WithCollectionTag,该Tag负责取得Collection,并遍历执行子Tag

package diegoyun;

import java.util.Collection;

import java.util.Iterator;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.commons.beanutils.PropertyUtils;

public class WithCollectionTag extends BodyTagSupport {

private Object element = null;

private Collection list = null;

private Iterator iterator = null;

public Object getElement() {

return element;

}

public void setProperty(String property) throws JspException {

//取得父Tag对象,并且得到Collection

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航