<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    package com.rain.tag;

    import Java.io.IOException;
    import Java.util.Collection;
    import Java.util.Iterator;

    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspTagException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.BodyTagSupport;

    public class IterateTag extends BodyTagSupport {

     private String name;  //代表了在pageContext中表示的一個屬性的名字
     private Iterator it;     //代表要迭代的內容
     private String type;  //表示it中對象的類型
     
     public void setCollection(Collection collection){
      if(collection.size()>0){
       it=collection.iterator();
      }
     }
     
     public void setName(String name){
      this.name=name;
     }
     
     public void setType(String type){
      this.type=type;
     }

     @Override
     public int doAfterBody() throws JspException {
      // TODO Auto-generated method stub
      return continueNext(it);
     }

     @Override
     public int doEndTag() throws JspException {
      // TODO Auto-generated method stub
      try{
       if(bodyContent!=null){
        bodyContent.writeOut(bodyContent.getEnclosingWriter());
       }
      }catch(IOException e){
       throw new JspTagException("IO Error:"+e.getMessage());
      }
      return EVAL_PAGE;
     }

     @Override
     public int doStartTag() throws JspException {
      // TODO Auto-generated method stub
      if(it==null){
       return SKIP_BODY;
      }else{
       return continueNext(it);
      }
     }
     
     protected int continueNext(Iterator it)throws JspTagException{
      if(it.hasNext()){
       pageContext.setAttribute(name, it.next(), PageContext.PAGE_SCOPE);
       return EVAL_BODY_AGAIN;
      }else{
       return SKIP_BODY;
      }
     }
    }
    由于BodyTagSupport類實現了TagSupport,而TagSupport又實現了TterationTag接口。故在開發迭代標簽時可以直接從BodyTagSupport繼承。


    package com.rain.tag;

    import javax.servlet.jsp.tagext.TagData;
    import javax.servlet.jsp.tagext.TagExtraInfo;
    import javax.servlet.jsp.tagext.VariableInfo;

    //TagExtraInfo用于提供一些在標簽翻譯時相關的信息
    public class IterateTEI extends TagExtraInfo {

     public IterateTEI(){
      super();
     }

     @Override
     public VariableInfo[] getVariableInfo(TagData arg0) {
      // TODO Auto-generated method stub
      return new VariableInfo[]{
        new VariableInfo(arg0.getAttributeString("name"),
                         arg0.getAttributeString("type"),
                         true,
                         VariableInfo.NESTED)
      };
     }
    }
    需要說明的是VariableInfo的幾個常數,如下所示:
    1.NESTED:標簽中的參數在starttag到endtag之間是有效的。
    2.AT_BENGIN:標簽中的參數在標簽的開始到JSP頁面結束是有效的。
    3.AT_END:標簽中的參數在標簽的結束到JSP頁面結束是有效的。


    在標簽的描述中,必須同時指定標簽的實現類和IterateTEI類。
           <tag>
              <name>iterate</name>
                <tag-class>com.rain.tag.IterateTag</tag-class>
                <tei-class>com.rain.tag.IterateTEI</tei-class>
              <body-content>jsp</body-content>
              <attribute>
                <name>collection</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                <name>name</name>
                <required>true</required>
              </attribute>
              <attribute>
                <name>type</name>
                <required>true</required>
              </attribute>
          </tag>


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<web-app>
     <taglib>
       <taglib-uri>/demotag</taglib-uri>
       <taglib-location>/WEB-INF/mytag.tld</taglib-location>
     </taglib>
    </web-app>

    <%@ page language="
    Java" contentType="text/html; charset=UTF-8"%>
    <jsp:directive.page import="Java.util.Collection"/>
    <%@ taglib uri="/demotag" prefix="mt" %>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    <%
     String one="one";
     String two="two";
     String three="three";
     Collection list=new Java.util.ArrayList();
     list.add(one);
     list.add(two);
     list.add(three);
    %>
    <mt:iterate name="scott" type="String" collection="<%=list%>">
      <%=scott%><br>
    </mt:iterate>
    </body>
    </html>

    運行結果:
    one
    two
    three

    posted on 2007-01-22 16:15 周銳 閱讀(330) 評論(0)  編輯  收藏 所屬分類: Jsp
    主站蜘蛛池模板: 亚洲色偷偷色噜噜狠狠99网| h在线看免费视频网站男男| 精品少妇人妻AV免费久久洗澡| 亚洲日韩AV一区二区三区中文| 免费在线观看中文字幕| 久热免费在线视频| 亚洲日本中文字幕天天更新| 亚洲无码黄色网址| 91免费播放人人爽人人快乐| 成a人片亚洲日本久久| 亚洲精品成人av在线| 国产免费私拍一区二区三区| 国产精品免费看久久久| 精品无码专区亚洲| 久久亚洲美女精品国产精品 | 亚洲精选在线观看| 免费看美女被靠到爽| 国产免费爽爽视频在线观看| 亚洲av中文无码字幕色不卡 | 亚洲精品国产手机| 一本久久综合亚洲鲁鲁五月天 | baoyu122.永久免费视频| 亚洲高清有码中文字| 亚洲精品无码乱码成人| 青青草国产免费久久久下载| 久久久精品免费视频| 深夜特黄a级毛片免费播放| 亚洲美女aⅴ久久久91| 亚洲中文字幕无码一区| 好吊妞在线成人免费| 67194成手机免费观看| 丰满妇女做a级毛片免费观看| 亚洲中文字幕久久久一区| 亚洲va久久久噜噜噜久久天堂| 国产传媒在线观看视频免费观看| 最近中文字幕大全免费版在线 | 亚洲成av人影院| 四虎影视永久免费观看网址| 毛片在线免费视频| h在线观看视频免费网站| 免费看搞黄视频网站|