龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

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

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
第四篇 支持循环的Tag 1。问题:在request里的 People 对象,有个属性叫 men ,men 是一个Collection ,有许多个man 。现在,把 collection里的man的名字都显示出来 显然,这是一个嵌套Tag的问题。

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

精彩图集

赞助商链接