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.

 Intel Go Parallel Portal
 Internet.com eBook Library
 IBM Software Construction Toolbox
 Microsoft RIA Development Center
 Destination .NET
XML error: not well-formed (invalid token) at line 43
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%.

Google Hopes Chrome Will Help, Not Hurt Firefox
Remember Figlets? They're Back With Zend
Microsoft Readies an App Store Competitor?
Google: Chrome Browser Will Make Money
Sam Ramji: Microsoft's Man in Open Source
Google to Shake Up Browsers With Own Launch
Mozilla's Ubquity Mashup: For The Masses?
iPhone Users Just Want to Have Fun
Oops! I Fixed the Linux Kernel
Jim Zemlin: The New Center of Linux Gravity

Code Around C#'s Using Statement to Release Unmanaged Resources
Writing Functional Code with RDFa
BitLocker Brings Encryption to Windows Server 2008
Network Know-How: Exploring Network Algorithms
Create a Durable and Reliable WCF Service with MSMQ 4.0
The Baker's Dozen: 13 Tips for SQL Server 2008 and SSRS 2008
Book Excerpt: Microsoft Expression Blend Unleashed
Develop a Mobile RSS Feed the Easy Way
State of the Semantic Web: Know Where to Look
A 3D Exploration of the HTML Canvas Element

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



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
Intel PDF: Virtualization Delivers Data Center Efficiency
Intel eBook: Managing the Evolving Data Center
Microsoft Article: BitLocker Brings Encryption to Windows Server 2008
Symantec eBook: The Guide to E-Mail Archiving and Management
Microsoft Article: RODCs Transform Branch Office Security
Go Parallel Article: James Reinders on the Intel Parallel Studio Beta Program
Avaya Article: Advancing the State of the Art in Customer Service
Adobe Acrobat Connect Pro: Web Conferencing and eLearning Whitepapers
Avaya Article: Avaya AE Services Provide Rapid Telephony Integration with Facebook
Go Parallel Article: Getting Started with TBB on Windows
HP eBook: Storage Networking , Part 1
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
Intel Seminar: Efficiencies in Hardware/Software Virtualization
HP Webcast: Disaster Recovery Planning
Go Parallel Video: Performance and Threading Tools for Game Developers
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
IBM TCO eKIT: Your IT Budget is Under Attack, Get in Control
IBM Energy Efficiency eKIT: Learn How to Reduce Costs
30-Day Trial: SPAMfighter Exchange Module
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Microsoft Article: Silverlight Streaming--Free Video Hosting for All
Featured Algorithm: Intel Threading Building Blocks - parallel_reduce
HP Demo: StorageWorks EVA4400
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES