<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久热只有精品视频免费观看17| 中文字幕无码视频手机免费看 | 亚洲午夜久久久久久久久久| 真正全免费视频a毛片| 四虎影视精品永久免费网站| 美美女高清毛片视频黄的一免费| 色吊丝最新永久免费观看网站| 亚洲国产成人手机在线观看| 日韩免费一区二区三区| 亚洲Aⅴ在线无码播放毛片一线天| 国产精品久免费的黄网站| 猫咪免费人成在线网站| 亚洲视频一区二区| 女人隐私秘视频黄www免费| 亚洲五月激情综合图片区| 一色屋成人免费精品网站| 亚洲成a人片在线不卡| 日本免费人成视频播放 | 亚洲人成片在线观看| 免费人成网站在线观看10分钟| 亚洲一区二区三区在线网站| 国产最新凸凹视频免费| 老司机精品免费视频| 亚洲专区先锋影音| 色视频色露露永久免费观看| 皇色在线免费视频| 亚洲无砖砖区免费| 永久免费AV无码网站在线观看| 一个人看的www免费在线视频| 亚洲成在人天堂一区二区| 毛片在线免费视频| 四虎影视久久久免费| 亚洲欧洲在线观看| 午夜视频免费观看| 国产在线观a免费观看| 亚洲制服丝袜第一页| 亚洲伊人久久精品影院| 免费看国产成年无码AV片| a高清免费毛片久久| 亚洲一区二区三区国产精品无码|