程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Taglib原理和實現之循環的Tag

Taglib原理和實現之循環的Tag

日期:2017/1/5 10:11:49      編輯:關於JSP

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;
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved