advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement



Title: JSP Tag Libraries
ISBN: 193011009X
US Price: $35.96
Publication Date: May 2001
Pages: 656
© 2001 Manning Publications Co.

Reviews : Java Books :
JSP Tag Libraries : Chapter 10: Iterating with Tags

10.3 IterateTag

The previous section presented a generic iteration tag infrastructure that we will now use to develop a new iteration tag (named IterateTag) which will be able to iterate over the following types of objects:

  • Arrays of all types
  • Enumerations— objects of type java.util.Enumeration
  • Iterators— objects of type java.util.Iterator.

We're going to put this functionality into a single tag so its users will be able to use one tag for all their iteration chores. They will be able to reference the object they want to iterate in the same way as in chapter 8, using Java reflection. In fact, we'll reuse the reflection code we saw in chapter 8's ReflectionTag to accomplish this. In doing so, our tag will be able to take any bean property value and iterate its objects. For example, we will be able to take a shopping cart with a method such as:

public Enumeration getProducts(); 

and iterate on the Enumeration value returned from it.

10.3.1 Design considerations for IterateTag

Given that we have the generic iteration infrastructure, and that we have a previously built basic reflection tag, implementing our tag should be a breeze (almost codeless, you might expect). But this is not quite the case because a Java class can-not inherit two superclasses (no multiple inheritance, if you recall). Also, our ReflectionTag did not implement BodyTag; instead, it implemented the Tag interface, so it cannot serve as a base class for an iteration-related tag. As a result, our iteration tag will have to reimplement the reflection code that we previously developed. There are ways to share the implementation code between the tags, but for simplicity's sake, we will merely copy and paste the needed code.

10.3.2 Wrapping iterators

We will use the ReflectionTag code from chapter 8 to procure the referenced object from within the iteration tag, but we still need to decide what to do with it; meaning, how are we going to wrap it within an IterationSupport? We choose to create an IterationSupport implementation for each of the different iterator types (Iterator, Enumeration, and Array), then wrap the object within the matching IterationSupport implementation. An IterationSupport wrapper for the Iterator interface was covered in the previous section, so let's now look at the individual wrappers for Array and Enumeration.

ArrayIterationSupport

The first IterationSupport wrapper class we implement will be for Arrays. Implementing IterationSupport is not usually too much of a challenge, yet this case is different due to the requirement to be iteratable on any type of Array (i. e., an Array of Strings, an Array of Dates, etc.). Normally, when the array element type is known, indexing the array elements is a snap, but how do you do that when the element type is unknown?

The answer, as you might have guessed, is reflection. The reflection package contains an Array class with static methods for manipulating array elements and querying the array's length. We make use of this reflection class in our implementation of ArrayIterationSupport, as seen in listing 10.7.

Listing 10. 7 Source code for the ArrayIterationSupport utility class

package book.iteration; 

import java.lang.reflect.Array; 
import javax.servlet.jsp.JspException; 

class ArrayIterationSupport implements IterationSupport { 
	protected Object a = null; 
	protected int pos = 0; 

	ArrayIterationSupport(Object a) 
	{ 
		this. a = a; 
		this. pos = 0; 
	} 
	public boolean hasNext() 
		throws JspException 
	{ 
	return (pos < Array.getLength(a));  
	} 
	
	public Object getNext() 
		throws JspException 
	{ 
		if( hasNext()) { 
		Object rc = null; 
		rc = Array.get(a, pos);  
		pos++; 
		return rc; 
		} 
	
		// Throw an exception 
	} 
} 

Using Array's static method to find the length of the input array.

Using Array's static method to get an indexed value.

The functionality rendered by the Array class is enough for us to be able to have full access to all the array's attributes and elements.

How to Add Java Applets to Your Site

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.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs