You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-user@tomcat.apache.org by Jeff Turner <je...@socialchange.net.au> on 2000/12/10 04:43:29 UTC

Re: JSP bodycontent?

On Sat, 9 Dec 2000, James Carman wrote:

> Does Tomcat support the JSP body content for a BodyTag?  In my doAfterBody
> method (inherited from BodyTagSupport), I return EVAL_BODY_TAG.  I have some

You must return EVAL_BODY_TAG in your doStartTag() method, not
doAfterBody(). Have a look at the jakarta-taglibs project for some nice
examples, in particular
/utility/src/org/apache/taglibs/utility/basic/IncludeTag.java

As an aside, I noticed that JRun does not comply with the spec and call
setBodyContent on empty tags like <util:include url="foo.html"/>. You have
to trick it by saying <util:include url="foo.html"></util:include>. This
means that some jakarta-taglibs taglibs won't work under JRun. This isn't
fixed in SP1, so watch out for it if you ever have to port to JRun.

--Jeff

> debug statements in my code, so I can see that the doAfterBody method is
> called multiple times, but I'm not seeing the html that should be generated
> by my JSP code within the tag's body.  Can somebody help me?
> 
> ************************************************
> Here's my Java code...
> 
> package ws.carman.taglib;
> 
> import javax.servlet.jsp.tagext.BodyTagSupport;
> import java.util.Iterator;
> import java.util.Collection;
> import javax.servlet.ServletRequest;
> 
> public class IterateTag extends BodyTagSupport
> {
>   private String m_CollectionName;
>   private String m_ElementName;
>   private Iterator m_Iterator;
> 
>   public final void setCollectionName( final String newCollectionName )
>   {
>     m_CollectionName = newCollectionName;
>   }
> 
>   public final void setElementName( final String newElementName )
>   {
>     m_ElementName = newElementName;
>   }
> 
>   public final int doStartTag()
>   {
>     final ServletRequest request = pageContext.getRequest();
>     final Collection coll = ( Collection )request.getAttribute(
> m_CollectionName );
>     m_Iterator = coll.iterator();
>     return doNext();
>   }
> 
>   public final int doAfterBody()
>   {
>     System.out.println( "Inside doAfterBody!" );
>     return doNext();
>   }
> 
>   private final int doNext()
>   {
>     if( m_Iterator.hasNext() )
>     {
>       pageContext.getRequest().setAttribute( m_ElementName,
> m_Iterator.next() );
>       System.out.println( "Current element is " +
> pageContext.getRequest().getAttribute( m_ElementName ) );
>       return EVAL_BODY_TAG;
>     }
>     else
>     {
>       return SKIP_BODY;
>     }
>   }
> 
>   public void release()
>   {
>     m_ElementName = null;
>     m_CollectionName = null;
>     m_Iterator = null;
>   }
> }
> 
> *********************************************************
> Here's the tag library descriptor file...
> 
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <!DOCTYPE taglib
>  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
>  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
> 
> <!-- a tag library descriptor -->
> 
> <taglib>
>   <tlibversion>1.0</tlibversion>
>   <jspversion>1.1</jspversion>
>   <shortname>carman</shortname>
>   <uri></uri>
>   <info></info>
>   <bodycontent>JSP</bodycontent>
>   <tag>
>     <name>iterate</name>
>     <tagclass>ws.carman.taglib.IterateTag</tagclass>
>     <info>Iterates throug a named collection</info>
> 
> 
>     <attribute>
>       <name>collectionName</name>
>         <required>true</required>
>     </attribute>
> 
>     <attribute>
>       <name>elementName</name>
>       <required>true</required>
>     </attribute>
>   </tag>
> </taglib>
> 
> ***********************************************************
> And finally, here's my JSP...
> 
> <HTML>
>   <HEAD>
>     <TITLE>Iterator Example</TITLE>
>   </HEAD>
>  <%@ page import="java.util.*" %>
> <%@ taglib uri="taglib/iterate.tld" prefix="carman" %>
> 
> <%
> 	final String[] listElements = new String[] { "Hello", "World", "How",
> "Are", "You" };
> 	final List list = Arrays.asList( listElements );
> 	request.setAttribute( "list", list );
> %>
>   <BODY>
>   Before Tag!<BR>
>     <carman:iterate collectionName="list" elementName="element">
>       The current element is <%=request.getAttribute( "element" )%><BR>
>     </carman:iterate>
>   After Tag!<BR>
>   </BODY>
> </HTML>
> 



Re: JSP bodycontent?

Posted by Hans Bergsten <ha...@gefionsoftware.com>.
James Carman wrote:
> 
> I copied this out of the documentation of the BodyTagSupport class'
> doAfterBody method...
> 
> "Actions after some body has been evaluated. Not invoked in empty tags or in
> tags returning SKIP_BODY in doStartTag() This method is invoked after every
> body evaluation. The pair "BODY -- doAfterBody()" is invoked initially if
> doStartTag() returned EVAL_BODY_TAG, and it is repeated as long as the
> doAfterBody() evaluation returns EVAL_BODY_TAG"
> 
> So, it seems that the pair "BODY -- doAfterBody()" will be invoked so long
> as doAfterBody returns EVAL_BODY_TAG, and in my example, it does execute the
> correct number of times (5 in my case, one for each String object in the
> collection).  The only issue is that it's not actually executing the JSP
> code inside the tag.  It's iterating correctly, but not actually doing the
> work inside the body of the tag.  Has anyone else seen this?

Have you defined that the body contains JSP elements in the TLD?

      <bodycontent>JSP</bodycontent>

Hans
-- 
Hans Bergsten		hans@gefionsoftware.com
Gefion Software		http://www.gefionsoftware.com
Author of JavaServer Pages (O'Reilly), http://TheJSPBook.com

RE: JSP bodycontent?

Posted by Jeff Turner <je...@socialchange.net.au>.
On Sat, 9 Dec 2000, James Carman wrote:

> I copied this out of the documentation of the BodyTagSupport class'
> doAfterBody method...
> 
> "Actions after some body has been evaluated. Not invoked in empty tags or in
> tags returning SKIP_BODY in doStartTag() This method is invoked after every
> body evaluation. The pair "BODY -- doAfterBody()" is invoked initially if
> doStartTag() returned EVAL_BODY_TAG, and it is repeated as long as the
> doAfterBody() evaluation returns EVAL_BODY_TAG"
> 
> So, it seems that the pair "BODY -- doAfterBody()" will be invoked so long
> as doAfterBody returns EVAL_BODY_TAG, and in my example, it does execute the
> correct number of times (5 in my case, one for each String object in the
> collection).  The only issue is that it's not actually executing the JSP
> code inside the tag.  It's iterating correctly, but not actually doing the
> work inside the body of the tag.  Has anyone else seen this?

Oops, I should read your question more thoroughly.

I think the problem is that your taglib isn't doing anything with the body
content. On p104 of the spec, it says:

 "it is the responsibility of the tag handler to manipulate body content.
For example, the tag handler may take the body content, converting it into
a string using the bodyContent.getString method and then use it. **Or the
tag handler may take the body content and write it out into it's enclosing
JspWriter using the bodyContext.writeOut method**."

Ie, it's your responsibility as a tag writer to do something with the
enclosed content. Now, in your taglib, you're not doing anything with the
content. You're just returning SKIP_BODY as soon as you reach the end. So
of course, no enclosed content is returned.

Take a look at the code for the jakarta-taglibs "ForTag" tag 
(/utility/src/org/apache/taglibs/utility/lang/ForTag.java):


they have:

 public int doAfterBody() throws JspException {
    try {
        count++;
        if (count < getIterations()) {
        pageContext.setAttribute(getVarName(),new Integer(count));
        return EVAL_BODY_TAG;
        }
>>>     bodyContent.writeOut(bodyContent.getEnclosingWriter());
        return SKIP_BODY;
    } catch (IOException ex) {
        throw new JspException(ex.getMessage());
    }
    }

The highlighted line is the one you're missing. It writes the content
of the current bodyContent object to the enclosing stream.

I've included this text at the location I think it should be in your code
below.

Alternatively, since your tag doesn't need to manipulate the contents
of it's body anyway, you could just extend TagSupport instead of
BodyTagSupport. Then the bodyContext object wouldn't get replaced, and you
wouldn't be responsible for copying body content to the stream. Your
doStartTag() could then just return EVAL_BODY_INCLUDE. See p103 of the
spec for details.

Btw, take all of this with a pinch of salt ;) I've never written a taglib,
just used them.

--Jeff


> 
> 
> -----Original Message-----
> From: Jeff Turner [mailto:jeff@socialchange.net.au]
> Sent: Saturday, December 09, 2000 10:43 PM
> To: tomcat-user@jakarta.apache.org; jwcarman@usa.net
> Cc: taglibs-user@jakarta.apache.org
> Subject: Re: JSP bodycontent?
> 
> 
> On Sat, 9 Dec 2000, James Carman wrote:
> 
> > Does Tomcat support the JSP body content for a BodyTag?  In my doAfterBody
> > method (inherited from BodyTagSupport), I return EVAL_BODY_TAG.  I have
> some
> 
> You must return EVAL_BODY_TAG in your doStartTag() method, not
> doAfterBody(). Have a look at the jakarta-taglibs project for some nice
> examples, in particular
> /utility/src/org/apache/taglibs/utility/basic/IncludeTag.java
> 
> As an aside, I noticed that JRun does not comply with the spec and call
> setBodyContent on empty tags like <util:include url="foo.html"/>. You have
> to trick it by saying <util:include url="foo.html"></util:include>. This
> means that some jakarta-taglibs taglibs won't work under JRun. This isn't
> fixed in SP1, so watch out for it if you ever have to port to JRun.
> 
> --Jeff
> 
> > debug statements in my code, so I can see that the doAfterBody method is
> > called multiple times, but I'm not seeing the html that should be
> generated
> > by my JSP code within the tag's body.  Can somebody help me?
> >
> > ************************************************
> > Here's my Java code...
> >
> > package ws.carman.taglib;
> >
> > import javax.servlet.jsp.tagext.BodyTagSupport;
> > import java.util.Iterator;
> > import java.util.Collection;
> > import javax.servlet.ServletRequest;
> >
> > public class IterateTag extends BodyTagSupport
> > {
> >   private String m_CollectionName;
> >   private String m_ElementName;
> >   private Iterator m_Iterator;
> >
> >   public final void setCollectionName( final String newCollectionName )
> >   {
> >     m_CollectionName = newCollectionName;
> >   }
> >
> >   public final void setElementName( final String newElementName )
> >   {
> >     m_ElementName = newElementName;
> >   }
> >
> >   public final int doStartTag()
> >   {
> >     final ServletRequest request = pageContext.getRequest();
> >     final Collection coll = ( Collection )request.getAttribute(
> > m_CollectionName );
> >     m_Iterator = coll.iterator();
> >     return doNext();
> >   }
> >
> >   public final int doAfterBody()
> >   {
> >     System.out.println( "Inside doAfterBody!" );
> >     return doNext();
> >   }
> >
> >   private final int doNext()
> >   {
> >     if( m_Iterator.hasNext() )
> >     {
> >       pageContext.getRequest().setAttribute( m_ElementName,
> > m_Iterator.next() );
> >       System.out.println( "Current element is " +
> > pageContext.getRequest().getAttribute( m_ElementName ) );
> >       return EVAL_BODY_TAG;
> >     }
> >     else
> >     {

bodyContent.writeOut(bodyContent.getEnclosingWriter());

> >       return SKIP_BODY;
> >     }
> >   }
> >
> >   public void release()
> >   {
> >     m_ElementName = null;
> >     m_CollectionName = null;
> >     m_Iterator = null;
> >   }
> > }
> >
> > *********************************************************
> > Here's the tag library descriptor file...
> >
> > <?xml version="1.0" encoding="ISO-8859-1" ?>
> > <!DOCTYPE taglib
> >  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
> >  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
> >
> > <!-- a tag library descriptor -->
> >
> > <taglib>
> >   <tlibversion>1.0</tlibversion>
> >   <jspversion>1.1</jspversion>
> >   <shortname>carman</shortname>
> >   <uri></uri>
> >   <info></info>
> >   <bodycontent>JSP</bodycontent>
> >   <tag>
> >     <name>iterate</name>
> >     <tagclass>ws.carman.taglib.IterateTag</tagclass>
> >     <info>Iterates throug a named collection</info>
> >
> >
> >     <attribute>
> >       <name>collectionName</name>
> >         <required>true</required>
> >     </attribute>
> >
> >     <attribute>
> >       <name>elementName</name>
> >       <required>true</required>
> >     </attribute>
> >   </tag>
> > </taglib>
> >
> > ***********************************************************
> > And finally, here's my JSP...
> >
> > <HTML>
> >   <HEAD>
> >     <TITLE>Iterator Example</TITLE>
> >   </HEAD>
> >  <%@ page import="java.util.*" %>
> > <%@ taglib uri="taglib/iterate.tld" prefix="carman" %>
> >
> > <%
> > 	final String[] listElements = new String[] { "Hello", "World", "How",
> > "Are", "You" };
> > 	final List list = Arrays.asList( listElements );
> > 	request.setAttribute( "list", list );
> > %>
> >   <BODY>
> >   Before Tag!<BR>
> >     <carman:iterate collectionName="list" elementName="element">
> >       The current element is <%=request.getAttribute( "element" )%><BR>
> >     </carman:iterate>
> >   After Tag!<BR>
> >   </BODY>
> > </HTML>
> >
> 
> 



RE: JSP bodycontent?

Posted by James Carman <jw...@usa.net>.
I copied this out of the documentation of the BodyTagSupport class'
doAfterBody method...

"Actions after some body has been evaluated. Not invoked in empty tags or in
tags returning SKIP_BODY in doStartTag() This method is invoked after every
body evaluation. The pair "BODY -- doAfterBody()" is invoked initially if
doStartTag() returned EVAL_BODY_TAG, and it is repeated as long as the
doAfterBody() evaluation returns EVAL_BODY_TAG"

So, it seems that the pair "BODY -- doAfterBody()" will be invoked so long
as doAfterBody returns EVAL_BODY_TAG, and in my example, it does execute the
correct number of times (5 in my case, one for each String object in the
collection).  The only issue is that it's not actually executing the JSP
code inside the tag.  It's iterating correctly, but not actually doing the
work inside the body of the tag.  Has anyone else seen this?


-----Original Message-----
From: Jeff Turner [mailto:jeff@socialchange.net.au]
Sent: Saturday, December 09, 2000 10:43 PM
To: tomcat-user@jakarta.apache.org; jwcarman@usa.net
Cc: taglibs-user@jakarta.apache.org
Subject: Re: JSP bodycontent?


On Sat, 9 Dec 2000, James Carman wrote:

> Does Tomcat support the JSP body content for a BodyTag?  In my doAfterBody
> method (inherited from BodyTagSupport), I return EVAL_BODY_TAG.  I have
some

You must return EVAL_BODY_TAG in your doStartTag() method, not
doAfterBody(). Have a look at the jakarta-taglibs project for some nice
examples, in particular
/utility/src/org/apache/taglibs/utility/basic/IncludeTag.java

As an aside, I noticed that JRun does not comply with the spec and call
setBodyContent on empty tags like <util:include url="foo.html"/>. You have
to trick it by saying <util:include url="foo.html"></util:include>. This
means that some jakarta-taglibs taglibs won't work under JRun. This isn't
fixed in SP1, so watch out for it if you ever have to port to JRun.

--Jeff

> debug statements in my code, so I can see that the doAfterBody method is
> called multiple times, but I'm not seeing the html that should be
generated
> by my JSP code within the tag's body.  Can somebody help me?
>
> ************************************************
> Here's my Java code...
>
> package ws.carman.taglib;
>
> import javax.servlet.jsp.tagext.BodyTagSupport;
> import java.util.Iterator;
> import java.util.Collection;
> import javax.servlet.ServletRequest;
>
> public class IterateTag extends BodyTagSupport
> {
>   private String m_CollectionName;
>   private String m_ElementName;
>   private Iterator m_Iterator;
>
>   public final void setCollectionName( final String newCollectionName )
>   {
>     m_CollectionName = newCollectionName;
>   }
>
>   public final void setElementName( final String newElementName )
>   {
>     m_ElementName = newElementName;
>   }
>
>   public final int doStartTag()
>   {
>     final ServletRequest request = pageContext.getRequest();
>     final Collection coll = ( Collection )request.getAttribute(
> m_CollectionName );
>     m_Iterator = coll.iterator();
>     return doNext();
>   }
>
>   public final int doAfterBody()
>   {
>     System.out.println( "Inside doAfterBody!" );
>     return doNext();
>   }
>
>   private final int doNext()
>   {
>     if( m_Iterator.hasNext() )
>     {
>       pageContext.getRequest().setAttribute( m_ElementName,
> m_Iterator.next() );
>       System.out.println( "Current element is " +
> pageContext.getRequest().getAttribute( m_ElementName ) );
>       return EVAL_BODY_TAG;
>     }
>     else
>     {
>       return SKIP_BODY;
>     }
>   }
>
>   public void release()
>   {
>     m_ElementName = null;
>     m_CollectionName = null;
>     m_Iterator = null;
>   }
> }
>
> *********************************************************
> Here's the tag library descriptor file...
>
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <!DOCTYPE taglib
>  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
>  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
>
> <!-- a tag library descriptor -->
>
> <taglib>
>   <tlibversion>1.0</tlibversion>
>   <jspversion>1.1</jspversion>
>   <shortname>carman</shortname>
>   <uri></uri>
>   <info></info>
>   <bodycontent>JSP</bodycontent>
>   <tag>
>     <name>iterate</name>
>     <tagclass>ws.carman.taglib.IterateTag</tagclass>
>     <info>Iterates throug a named collection</info>
>
>
>     <attribute>
>       <name>collectionName</name>
>         <required>true</required>
>     </attribute>
>
>     <attribute>
>       <name>elementName</name>
>       <required>true</required>
>     </attribute>
>   </tag>
> </taglib>
>
> ***********************************************************
> And finally, here's my JSP...
>
> <HTML>
>   <HEAD>
>     <TITLE>Iterator Example</TITLE>
>   </HEAD>
>  <%@ page import="java.util.*" %>
> <%@ taglib uri="taglib/iterate.tld" prefix="carman" %>
>
> <%
> 	final String[] listElements = new String[] { "Hello", "World", "How",
> "Are", "You" };
> 	final List list = Arrays.asList( listElements );
> 	request.setAttribute( "list", list );
> %>
>   <BODY>
>   Before Tag!<BR>
>     <carman:iterate collectionName="list" elementName="element">
>       The current element is <%=request.getAttribute( "element" )%><BR>
>     </carman:iterate>
>   After Tag!<BR>
>   </BODY>
> </HTML>
>



RE: JSP bodycontent?

Posted by James Carman <jw...@usa.net>.
I copied this out of the documentation of the BodyTagSupport class'
doAfterBody method...

"Actions after some body has been evaluated. Not invoked in empty tags or in
tags returning SKIP_BODY in doStartTag() This method is invoked after every
body evaluation. The pair "BODY -- doAfterBody()" is invoked initially if
doStartTag() returned EVAL_BODY_TAG, and it is repeated as long as the
doAfterBody() evaluation returns EVAL_BODY_TAG"

So, it seems that the pair "BODY -- doAfterBody()" will be invoked so long
as doAfterBody returns EVAL_BODY_TAG, and in my example, it does execute the
correct number of times (5 in my case, one for each String object in the
collection).  The only issue is that it's not actually executing the JSP
code inside the tag.  It's iterating correctly, but not actually doing the
work inside the body of the tag.  Has anyone else seen this?


-----Original Message-----
From: Jeff Turner [mailto:jeff@socialchange.net.au]
Sent: Saturday, December 09, 2000 10:43 PM
To: tomcat-user@jakarta.apache.org; jwcarman@usa.net
Cc: taglibs-user@jakarta.apache.org
Subject: Re: JSP bodycontent?


On Sat, 9 Dec 2000, James Carman wrote:

> Does Tomcat support the JSP body content for a BodyTag?  In my doAfterBody
> method (inherited from BodyTagSupport), I return EVAL_BODY_TAG.  I have
some

You must return EVAL_BODY_TAG in your doStartTag() method, not
doAfterBody(). Have a look at the jakarta-taglibs project for some nice
examples, in particular
/utility/src/org/apache/taglibs/utility/basic/IncludeTag.java

As an aside, I noticed that JRun does not comply with the spec and call
setBodyContent on empty tags like <util:include url="foo.html"/>. You have
to trick it by saying <util:include url="foo.html"></util:include>. This
means that some jakarta-taglibs taglibs won't work under JRun. This isn't
fixed in SP1, so watch out for it if you ever have to port to JRun.

--Jeff

> debug statements in my code, so I can see that the doAfterBody method is
> called multiple times, but I'm not seeing the html that should be
generated
> by my JSP code within the tag's body.  Can somebody help me?
>
> ************************************************
> Here's my Java code...
>
> package ws.carman.taglib;
>
> import javax.servlet.jsp.tagext.BodyTagSupport;
> import java.util.Iterator;
> import java.util.Collection;
> import javax.servlet.ServletRequest;
>
> public class IterateTag extends BodyTagSupport
> {
>   private String m_CollectionName;
>   private String m_ElementName;
>   private Iterator m_Iterator;
>
>   public final void setCollectionName( final String newCollectionName )
>   {
>     m_CollectionName = newCollectionName;
>   }
>
>   public final void setElementName( final String newElementName )
>   {
>     m_ElementName = newElementName;
>   }
>
>   public final int doStartTag()
>   {
>     final ServletRequest request = pageContext.getRequest();
>     final Collection coll = ( Collection )request.getAttribute(
> m_CollectionName );
>     m_Iterator = coll.iterator();
>     return doNext();
>   }
>
>   public final int doAfterBody()
>   {
>     System.out.println( "Inside doAfterBody!" );
>     return doNext();
>   }
>
>   private final int doNext()
>   {
>     if( m_Iterator.hasNext() )
>     {
>       pageContext.getRequest().setAttribute( m_ElementName,
> m_Iterator.next() );
>       System.out.println( "Current element is " +
> pageContext.getRequest().getAttribute( m_ElementName ) );
>       return EVAL_BODY_TAG;
>     }
>     else
>     {
>       return SKIP_BODY;
>     }
>   }
>
>   public void release()
>   {
>     m_ElementName = null;
>     m_CollectionName = null;
>     m_Iterator = null;
>   }
> }
>
> *********************************************************
> Here's the tag library descriptor file...
>
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <!DOCTYPE taglib
>  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
>  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
>
> <!-- a tag library descriptor -->
>
> <taglib>
>   <tlibversion>1.0</tlibversion>
>   <jspversion>1.1</jspversion>
>   <shortname>carman</shortname>
>   <uri></uri>
>   <info></info>
>   <bodycontent>JSP</bodycontent>
>   <tag>
>     <name>iterate</name>
>     <tagclass>ws.carman.taglib.IterateTag</tagclass>
>     <info>Iterates throug a named collection</info>
>
>
>     <attribute>
>       <name>collectionName</name>
>         <required>true</required>
>     </attribute>
>
>     <attribute>
>       <name>elementName</name>
>       <required>true</required>
>     </attribute>
>   </tag>
> </taglib>
>
> ***********************************************************
> And finally, here's my JSP...
>
> <HTML>
>   <HEAD>
>     <TITLE>Iterator Example</TITLE>
>   </HEAD>
>  <%@ page import="java.util.*" %>
> <%@ taglib uri="taglib/iterate.tld" prefix="carman" %>
>
> <%
> 	final String[] listElements = new String[] { "Hello", "World", "How",
> "Are", "You" };
> 	final List list = Arrays.asList( listElements );
> 	request.setAttribute( "list", list );
> %>
>   <BODY>
>   Before Tag!<BR>
>     <carman:iterate collectionName="list" elementName="element">
>       The current element is <%=request.getAttribute( "element" )%><BR>
>     </carman:iterate>
>   After Tag!<BR>
>   </BODY>
> </HTML>
>