Adding Spice to Struts
Adding Spice to Struts
by: Samudra Gupta
Last time when I published the article on Struts named "Strictly
Struts", I had some requests to write something more on the
topic. I am a big fan of Struts and find it so simple and
elegant to use that it seems there is less of tricks in Struts
to discuss. However, Ashish, one of my colleagues, presented me
with a little problem, which provided the basis of this article.
It is a problem with using dynamic form beans in Struts and we
needed more than Struts normally provides.
The Problem
One afternoon Ashish and I were discussing a piece of work he
was doing. All was coming along nicely but he was facing a
problem of duplication of data in using DynaActionForm. He was
trying to model an inheritance mechanism using DynaActionForm.
For example, say, we are developing an online Vehicle
registration system. Also let us assume that we want to register
two types of Vehicle Car and Ship. The object model (Figure-1)
of this problem domain inevitably looks something like the
following:
Figure 1: The domain model for the Vehicle registration
We needed to replicate the similar relationship in the struts
domain through ActionForms. As a strategy in our project, we use
DynaActionForms. Listing –1 depicts what the initial form bean
definitions looked like:
<form-bean name="CarForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="registrationNumber" type="java.lang.String"/>
<form-property name="maker" type="java.lang.String"/><
<form-property name="modelNumber" type="java.lang.Integer"/>
<form-property name="engineSize" type="java.lang.Integer"/>
<form-property name="noOfDoors" type="java.lang.Integer"/>
<form-property name="insuranceGroup" type="java.lang.String"/>
</form-bean>
<form-bean name="ShipForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="registrationNumber" type="java.lang.String"/>
<form-property name="maker" type="java.lang.String"/>
<form-property name="modelNumber" type="java.lang.Integer"/>
<form-property name="tonnage" type="java.lang.Integer"/>
<form-property name="numberOfBoilers" type="java.lang.Integer"/>
<form-property name="shipUsedAs" type="java.lang.String"/>
</form-bean>
Listing-1: The initial form-bean definition
This solution will work fine without any problem in the real
world. But rightly Ashish was not happy about the duplication of
data in both the form beans (The bolded areas represent the
duplicate data). Now we needed something more than what the
default DynaActionForm offers in Struts. We both started
thinking about a possible solution. Every solution to all
problems requires a method in its approach. So we started from
the basics of how Struts really handle the form-bean
configurations internally.
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.
|