Struts 2 Custom Validation – Workflow Interceptor
We can define our own validation logic (custom validation) in struts 2 by implementing the Validateable interface in the action class.
The workflow interceptor is used to get information about the error messages defined in the action class.
Workflow Interceptor
The workflow interceptor checks if there is any validation errors or not. It doesn’t perform any validation.
It is applied when action class implements the Validateable interface. The input is the default parameter for this interceptor that determines the result to be invoked for the action or field error.
It is found in the defaultStack so we don’t need to define it explicitly.
Parameters of workflow interceptor
There is only 1 parameter defined for workflow interceptor.
Parameter | Description |
---|---|
inputResultName | specifies the result name to be returned if field error or action error is found. It is set to input bydefault. |
Validateabale interface
The Validateable interface must be implemented to perform validation logic in the action class. It contains only one method validate() that must be overridden in the action class to define the validation logic. Signature of the validate method is:
ValidationAware interface
The ValidationAware interface can accept the field level or action class level error messages. The field level messages are kept in Map and Action class level messages are kept in collection. It should be implemented by the action class to add any error message.
Methods of ValidatationAware interface
The methods of ValidationAware interface are as follows:
Method | Description |
---|---|
void addFieldError(String fieldName,String errorMessage) | adds the error message for the specified field. |
void addActionError(String errorMessage) | adds an Action-level error message for this action. |
void addActionMessage(String message) | adds an Action-level message for this action. |
void setFieldErrors(Map<String,List<String>> map) | sets a collection of error messages for fields. |
void setActionErrors(Collection<String> errorMessages) | sets a collection of error messages for this action. |
void setActionMessages(Collection<String> messages) | sets a collection of messages for this action. |
boolean hasErrors() | checks if there are any field or action errors. |
boolean hasFieldErrors() | checks if there are any field errors. |
boolean hasActionErrors() | checks if there are any Action-level error messages. |
boolean hasActionMessages() | checks if there are any Action-level messages. |
Map<String,List<String>> getFieldErrors() | returns all the field level error messages. |
Collection<String> getActionErrors() | returns all the Action-level error messages. |
Collection<String> getActionMessages() | returns all the Action-level messages. |
Note: ActionSupport class implements Validateable and ValidationAware interfaces, so we can inherit the ActionSupport class to define the validation logic and error messages.
Steps to perform custom validation
The steps are as follows:
- create the form to get input from the user
- Define the validation logic in action class by extending the ActionSupport class and overriding the validate method
- Define result for the error message by the name input in struts.xml file
Example to perform custom validation
In this example, we are creating 4 pages :
- index.jsp for input from the user.
- RegisterAction.java for defining the validation logic.
- struts.xml for defining the result and action.
- welcome.jsp for the view component.
1) Create index.jsp for input
This jsp page creates a form using struts UI tags. It receives name, password and email id from the user.
index.jsp
2) Create the action class
This action class inherits the ActionSupport class and overrides the validate method to define the validation logic.
RegisterAction.java
3) Define a input result in struts.xml
This xml file defines an extra result by the name input, that will be invoked if any error message is found in the action class.
struts.xml
4) Create view component
It is the simple jsp file displaying the information of the user.
welcome.jsp
Output
Defining action level error message
The action level error message works for the whole form. We can define the action level error message by addActionError() method of ValidationAware interface in validate() method. For example:
Now you need to use actionerror tag in index.jsp file to display the action level error message.
index.jsp
Output