<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
    主站蜘蛛池模板: 亚洲熟妇av一区二区三区漫画| 久久亚洲国产精品123区| 亚洲短视频在线观看| 国产成人无码区免费内射一片色欲| 亚洲成AV人在线观看网址| 在线观看亚洲免费视频| 国产一区二区三区在线观看免费| 亚洲AV永久无码精品网站在线观看| 在线观看特色大片免费视频| 亚洲av无码不卡久久| 91嫩草国产在线观看免费| 亚洲精品人成网在线播放影院| 一个人免费观看在线视频www| 精品日韩99亚洲的在线发布| 在线观看人成网站深夜免费| 亚洲风情亚Aⅴ在线发布| 免费乱理伦在线播放| 中文字幕在线视频免费| 亚洲av无码国产精品夜色午夜| 久久免费的精品国产V∧| 亚洲午夜电影在线观看| 免费视频中文字幕| 免费中文字幕视频| 亚洲妇熟XXXX妇色黄| 在线看片v免费观看视频777| 亚洲日本天堂在线| 亚洲午夜激情视频| 久久永久免费人妻精品下载| 亚洲www在线观看| 亚洲国产成人精品91久久久| 免费人成激情视频在线观看冫 | 亚洲一级在线观看| 国产美女被遭强高潮免费网站| 一级**爱片免费视频| 亚洲天堂视频在线观看| 成人无遮挡毛片免费看| 国产精品免费久久久久影院| 亚洲精彩视频在线观看| 免费a级毛片网站| 在线观看的免费网站无遮挡| 丰满亚洲大尺度无码无码专线|