Validating your input
I'll finish this introduction to Struts by showing you how to make some
simple validations. Let's assume that the user of our form must enter his or her
last name, address, sex and age. The simplest way to implement validation is in
the ActionForm bean, but you can also do it in the Action class.
Step a: Code the "validate" method in ActionForm
While we're modifying the code, we also add some log messages so we can check
the data we receive from the form:
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// Log the forms data
servlet.log("Lastname:" + lastName);
servlet.log("Address:" + address);
servlet.log("Sex:" + sex);
servlet.log("Married:" + married);
servlet.log("Age:" + age);
// Check for mandatory data
ActionErrors errors = new ActionErrors();
if (lastName == null || lastName.equals("")) {
errors.add("Last Name", new ActionError("error.lastName"));
}
if (address == null || address.equals("")) {
errors.add("Address", new ActionError("error.address"));
}
if (sex == null || sex.equals("")) {
errors.add("Sex", new ActionError("error.sex"));
}
if (age == null || age.equals("")) {
errors.add("Age", new ActionError("error.age"));
}
return errors;
}
The servlet controller will check if the returned ActionErrors object is
empty or not. If not empty the controller will return to the page specified by
the "input" parameter in the config file. In our example this is the submit.jsp
page.
Step b: Define the error message text
The error messages are taken from the ApplicationResources.properties file.
The messages are inserted in the jsp-page by using the Struts tag
<html:errors/>. In order to have a nice formatting of the messages you
must also define two keys called errors.header and errors.footer. This is our
ApplicationResources.properties file (note that HTML tags may be included as you
like it):
errors.header=<h4>Validation Error(s)</h4><ul>
errors.footer=</ul><hr>
error.lastName=<li>Enter your last name
error.address=<li>Enter your address
error.sex=<li>Enter your sex
error.age=<li>Enter your age |
- Figure 9: The ApplicationResources.properties file -
Now restart the servlet container.
Step c: Test the validations
If we don't enter anything in the form we'll get this answer:

- Figure 10: Display of validation errors -
Note that age 0-19 is selected as default according to normal HTML selection
list practice.
The total picture
Here's a picture that shows how the Struts components work together:

- Figure 11: The Struts components -
Final remarks
There's a lot more to say about Struts, but having kept my example simple I
hope that I have brought forward the basic architecture of Struts. A very
important characteristic of this architecture is the loose coupling between
modules. There are no hardcoded file names or class names in the controller or
in the Action or ActionForm classes.
Another thing is that all text in your pages may be placed in the
ApplicationResources.properties file--you may even implement multi-language
support using these properties-files.
In my next article I'll dig somewhat deeper into Struts and build a more
realistic application that'll keep track of your CD/Video/DVD collection.
Resources
There are a lot of good resources available from the Struts web site. My favorites
are these:
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.
|