Professional Java Server Programming J2EE Edition Chapter 12
RowOpenTag.class
RowsTag.class
RowsTagExtraInfo.class
RowTagsExtraInfo.class
StyledXMLTag.class
TableTag.class
Note that although I wrote this particular example using Windows NT, the jar tool (which is written in Java)
uses identical syntax when running on other operating systems.
Warning: Tomcat 3.1 can produce translation errors if .java source files are included in tag library
JARs.
Combination of WAR and JAR
A combination of the second and third delivery methods is often useful. For example, consider a web
application that uses a tag library that may also be of value in other web applications. The best approach is to
package the tag library as a JAR, place this JAR in the /META-INF/lib directory of the web application's
WAR, and create a mapping in the WAR's web.xml file to the tag library's TLD. This approach works well;
the only issue is that the TLD must be extracted from the tag library JAR for it to be picked up by the
web.xml file or JSPs in the WAR. Unfortunately the <taglib> element's mapping does not work directly
to a JARed tag library. The tag library JAR can be directly imported into JSPs if it is publicly accessible,
under the web application's root, but this is somewhat less elegant. It's seldom a good idea to publish more
information than is strictly necessary.
This combination approach will be used later in the next chapter, as we'll need to reuse some of the tags to
support the application developed in Chapter 14.
Writing Tag Extensions
Once the initial concepts are grasped, implementing tag extensions is surprisingly easy.
Processing Attributes
Our simple example is all very well, but it doesn't take advantage of the dynamic potential of custom tags.
We could interrogate the PageContext to implement context-specific behavior, but there are far better
alternatives.
The easiest way to parameterize tags is to pass in XML attributes.
How do we make our tags handle attributes? The answer, not surprisingly, is that attributes in a TLD tag
element map onto bean properties of the corresponding tag handlers. The mapping of attributes onto tag
handler properties is, as we might expect, handled by the JSP engine using reflection and not only does it
work with primitive types, we can pass any type to a tag handler. (Draft versions of the JSP 1.1 specification
included a type subelement of the attribute TLD element; this has now been removed.)
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.
|