<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
    主站蜘蛛池模板: 久久午夜免费视频| 国产成人精品免费视频网页大全| 在线成人a毛片免费播放| 亚洲专区在线视频| 久久久久国产精品免费看| 国产亚洲综合网曝门系列| a级毛片在线免费| 亚洲国产成人精品无码区在线观看 | jizz免费观看| 亚洲日韩VA无码中文字幕| 美女被免费网站视频在线| 国产一区视频在线免费观看 | 亚洲中文字幕日本无线码| 一个人免费观看在线视频www| 亚洲国产激情在线一区| 好男人www免费高清视频在线| 亚洲国产精品精华液| 国产精品视_精品国产免费| 在线观看亚洲免费| 亚洲人妻av伦理| 久久久精品国产亚洲成人满18免费网站 | 亚洲av片在线观看| 国产免费无遮挡精品视频| 一级毛片大全免费播放下载| 亚洲精品国产精品乱码在线观看| 久久久99精品免费观看| 亚洲国产精品乱码在线观看97| 成人免费无遮挡无码黄漫视频| 在线观看亚洲免费视频| 日本红怡院亚洲红怡院最新| h视频在线观看免费完整版| 亚洲人成色777777老人头| 亚洲国产专区一区| 久久青草免费91线频观看不卡| 久久久久se色偷偷亚洲精品av| 永久黄网站色视频免费| 国产精品hd免费观看| 亚洲毛片在线观看| 好爽好紧好大的免费视频国产 | 亚洲区视频在线观看| 免费人成在线观看网站视频 |