Struts 2 validation is configured via XML or annotations. Manual
validation in the action is also possible, and may be combined with
XML and annotation-driven validation.
Validation also depends on both the validation and workflow
interceptors (both are included in the default interceptor stack). The
validation interceptor does the validation itself and creates a list
of field-specific errors. The workflow interceptor checks for the
presence of validation errors: if any are found, it returns the
"input" result (by default), taking the user back to the form which
contained the validation errors.
If we're using the default settings and our action doesn't have an
"input" result defined and there are validation (or, incidentally,
type conversion) errors, we'll get an error message back telling us
there's no "input" result defined for the action.
It is simple, you map the validators to the fields via the validation configuration file, or via annotations. Then apply a validation
interceptor to the action via referencing it explicitly or implicitly via the interceptor stack, custom stack or defaultStack
.
When validation started it invokes the validation manager to perform actual validation and save errors to the ValidationAware
action.
Your action should implement this interface, or just extend the ActionSupport
where it's already implemented, to save the errors. Then workflow
interceptor checks for those errors and if found any of them redirect to the INPUT
result, if no errors found the action invocation is executed. You may also add a programmatic validation to the action by implementing Validateable
interface, which ActionSupport
is implemented by default, hence to override the validate()
method(s).
As a supplement to XML based validation you could also apply annotation based configuration. This only the server-side validation, the client-side validation applied to the browser enabled javascript via Struts tags used for rendering a validation content to the page being validated.
All of this concept is not applicable to the action which requires authentication (unless the authentication interceptor is applied to the action). If you use JAAS authentication, then you should consider your action to implement PrincipalAware
or use roles
interceptor to restrict access to the action which checks the isUserInRole()
. You may use Action.LOGIN
result to return to the login page in authentication interceptor if the user is not authenticated like in Is there a way to redirect to another action class without using on struts.xml
example.