WEB开发网
开发学院WEB开发Jsp Taglib 原理和实现:第四章 循环的Tag 阅读

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

 2008-01-05 18:41:06 来源:WEB开发网   
核心提示:第四篇 支持循环的Tag1,问题:在request里的 People 对象,Taglib 原理和实现:第四章 循环的Tag,有个属性叫 men ,men 是一个Collection ,编写 People 类package diegoyun.vo;import java.util.Collection;public cl

第四篇 支持循环的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

Tags:Taglib 原理 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接