IterateTagExtraInfo
Accompanying the IterateTag is the IterateTagExtraInfo whose implementation
is fairly effortless. Once again, we need to create this TagExtraInfo object for our IterateTag
because we will be exporting a scripting variable from it. From an
attribute and variable exportation point of view, IterateTag and ExportTag (as presented
in chapter 8) are quite similar. The only difference is that our current variable
is exported as a NESTED variable, meaning its scope only exists within the tag's body.
Because they are so similar, all we need to do is inherit ExportTagExtraInfo (again,
from chapter 8) and modify the VariableInfo it returns to reflect a NESTED variable.
As listing 10. 10 shows, this is exactly what we did.
Listing 10. 10 Source code for the IterateTagExtraInfo class
package book.iteration;
import book.reflection.ExportTagExtraInfo;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;
public class IterateTagExtraInfo extends ExportTagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data)
{
VariableInfo[] rc = new VariableInfo[ 1];
rc[0] = new VariableInfo(data.getId(),
guessVariableType( data),
true,
VariableInfo.NESTED);
return rc;
}
}
Returns a NESTED variable.
IterateTag's TLD
The last step in our implementation of IterateTag is its tag library descriptor entry
as seen in listing 10.11.
Listing 10. 11 Tag library descriptor entry for IterateTag
<tag>
<name> iterate</name>
<tagclass> book.iteration.IterateTag</tagclass>
<teiclass> book.iteration.IterateTagExtraInfo</teiclass>
<bodycontent> JSP</bodycontent>
<info>
Iterate over an Object. The object can be an array,
Iterator or Enumeration.
</info>
<attribute>
<name> id</name>
<required> true</required>
<rtexprvalue> false</rtexprvalue>
</attribute>
<attribute>
<name> type</name>
<required> false</required>
<rtexprvalue> false</rtexprvalue>
</attribute>
<attribute>
<name> object</name>
<required> false</required>
<rtexprvalue> true</rtexprvalue>
</attribute>
<attribute>
<name> name</name>
<required> false</required>
<rtexprvalue> false</rtexprvalue>
</attribute>
<attribute>
<name> scope</name>
<required> false</required>
<rtexprvalue> false</rtexprvalue>
</attribute>
<attribute>
<name> index</name>
<required> false</required>
<rtexprvalue> true</rtexprvalue>
</attribute>
<attribute>
<name> property</name>
<required> false</required>
<rtexprvalue> false</rtexprvalue>
</attribute>
</tag>
The tag library entry is almost identical to the one we had for ExportTag. The only
significant difference is that ExportTag had an empty body, whereas IterateTag
has, of course, a JSP body.
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.