II.      ȯϴ ± ۼ

 

<IterateTag.java>
package tag;

 

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.util.*;

 

public class IterateTag extends BodyTagSupport{

   private String name;

   private Iterator iterator;

   private String type;

  

   public IterateTag(){super();}

  

   //BodyTag Ѱ Collection Ҹ ִ ȮѴ.

   public void setCollection(Collection collection){

               if(collection.size()>0){

                           iterator = collection.iterator();

               }

   }

  

   public void setName(String name){

               this.name = name;

   }

  

   public void setType(String type){

               this.type = type;

   }

   // Iterator ִ Ȯ ϰ üó ʴ´.

   // Iterator ִٸ PageContext Ҹ ߰Ѵ.        

   public int doStartTag() throws JspTagException{

               if(iterator == null){

                           return SKIP_BODY;

               }         

               return addNext(iterator);

   }

  

   public int doAfterBody() throws JspTagException{

               return addNext(iterator);          

   }

   //JSP BodyContent ϰ JSP Ͽ óϵ Ѵ.

   public int doEndTag() throws JspTagException{

               try{

                           if(bodyContent != null){

                                       bodyContent.writeOut(bodyContent.getEnclosingWriter());

                           }

               }catch(java.io.IOException e){

                           throw new JspTagException("IO Error: " + e.getMessage());                           

               }

               return EVAL_PAGE;

   }

  

  

   protected int addNext(Iterator iterator) throws JspTagException{

               if(iterator.hasNext()){

                           pageContext.setAttribute(name,iterator.next(),PageContext.PAGE_SCOPE);

                           return EVAL_BODY_TAG;

               }else{

                           return SKIP_BODY;

               }

   }         

}

 

          III.      TEI Ŭ ۼ

 

<IterateTEI.class>

 

package tag;

import javax.servlet.jsp.tagext.*;

public class IterateTEI extends TagExtraInfo

{

public IterateTEI()
{

super();

}

public VariableInfo[] getVariableInfo(TagData data)
{

return new VariableInfo[]
{

new VariableInfo(

data.getAttributeString("name"),
data.getAttributeString("type"),
true,
VariableInfo.NESTED

),

};

}

}

 

           

         IV.      ±׶̺귯

 

<tag>

<name>iterate</name>
<tagclass>com.acme.tag.IterateTag</tagclass>
<teiclass>com.acme.tag.IterateTEI</teiclass>
<bodycontent>JSP</bodycontent>
<info>A simple Iterator</info>
<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>

 

           V.      ۼ

<Company.java>

               package bean;
 
               import java.util.*;
               import java.io.*;
 
               public class Company implements Serializable {
                   private String name=null;
                   private Collection contacts=new HashSet();
 
                   private Contact lnkContact;
 
                   public Company(){}
 
                   public String getName()
                   {
                     return name;
                   }
 
                   public void setName(String name) {
                     this.name = name;
                   }
 
                   public Collection getContacts()
                   {
                     return contacts;
                   }
 
                   public void addContact(Contact contact)
                   {
                               contacts.add(contact);
                   }
               }

 

<Contact.java>

               package com.acme.bean;
 
import java.util.*;
import java.io.*;
 
public class Contact implements Serializable {
  private String name=null;
  private String phone=null;
  private String email=null;
  private String comment=null;
 
  public Contact(){}
 
  public String getName() {
    return name;
  }
 
   public void setName(String name) {
     this.name = name;
   }
 
   public String getPhone() {
    return phone;
   }
 
   public void setPhone(String phone) {
     this.phone = phone;
   }
 
   public String getEmail() {
    return email;
   }
 
  public void setEmail(String email) {
    this.email = email;
  }
 
   public String getComment() {
    return comment;
   }
  public void setComment(String comment) {
    this.comment = comment;
  }
}

 

 

         VI.      JSP ۼ

 

<%@ taglib uri="taglibExample" prefix="mt" %>
<%

bean.Company comp=new bean.Company();
comp.setName("Acme");
bean.Contact contact1=new bean.Contact();
contact1.setName("Bar, Foo");
contact1.setEmail("foo.bar@acme.com");
contact1.setPhone("+46 8 12 34 56");
contact1.setComment("Excellent with HTML");
bean.Contact contact2=new bean.Contact();
contact2.setName("Doe, Joe");
contact2.setEmail("joe.doe@acme.com");
contact2.setPhone("+46 8 65 43 21");
contact2.setComment("Very good at XML");
bean.Contact contact3=new bean.Contact();
contact3.setName("Doe, Jane");
contact3.setEmail("jane.doe@acme.com");
contact3.setPhone("+46 8 65 43 21");
contact3.setComment("JSP pro");
comp.addContact(contact1);
comp.addContact(contact2);
comp.addContact(contact3);
request.setAttribute("company",comp);

%>

<HTML>

<HEAD>

<TITLE>My Connections</TITLE>

</HEAD>
<BODY BGCOLOR="#FFFFFF">

<jsp:useBean id="company" scope="request" type="com.acme.bean.Company"/>
<FONT SIZE=+2>My connections at
<B><jsp:getProperty name="company" property="name"/></B></FONT>
<HR>
<TABLE>

<TR>

<TD>Name</TD>
<TD>Phone</TD>
<TD>Email</TD>
<TD>Comment</TD>

</TR>

<mt:iterate name="contact" collection="<%= company.getContacts()%>" type="com.acme.bean.Contact">
<TR>

<TD><jsp:getProperty name="contact" property="name"/></TD>
<TD><jsp:getProperty name="contact" property="phone"/></TD>
<TD><jsp:getProperty name="contact" property="email"/></TD>
<TD><jsp:getProperty name="contact" property="comment"/></TD>

</TR>
</mt:iterate>

</TABLE>

<HR>

</BODY>

</HTML>

 

2003-07-27