2) Business Logic: Here you are going to check for valid data relationships
and things that make sense for the particular problem you are triing to solve.

... This is where struts comes into the picture, by now the system should
be pretty well bulletproof. What we are going to do is make validation
friendlier and informative. Rember it is OK to have duplicate validations...

3) ActionErrors validate(ActionMapping map, HttpServletRequest req)
is where you can do your validation and feed back to the view, information
required to correct any errors. validate is run after the form
has been reset and after the ActionForm properties
have been set from corresponding view based input. Also remember you can turn
validation off with validate="false" in the action
mapping in the struts-config.xml. This is done by returning an ActionErrors
collection with messages from your ApplicationResources.properties
file.

Here you have access to the request so you can see what kinds of action is
being requested to fine tune your validations. The <html:error> tag
allows you to dump all errors on your page or a particular error associated
with a particular property. The input attribute of the struts-config.xmlaction allows you to send validation errors to a particular jsp /
html / tile page.

4) You can have the system perform low level validations and client side
feedback using a ValidatorForm or its derivatives. This will
generate javascript and give instant feedback to the user for simple data
entry errors. You code your validations in the validator-rules.xml
file. A working knowledge of regular expressions is necessary to use this
feature effectively.