Custom Validators in Struts 2.0

SHARE & COMMENT :

Struts 2.0 allows the use of Custom validators through the @CustomValidator annotation. The @CustomValidator annotation takes two mandatory parameters, type and message

also read:

  • type: Refers to the “name” given to the validator in the validators.xml file.
  • message: Message to be displayed when this validator fails.

A custom validator can be implemented by extending the FieldValidatorSupport, or alternatively the ValidatorSupport classes. The following sample builds on the example built in the previous post, Struts 2.0 Validaton: Annotations.

To run this sample, follow these steps… There’s More

  • Create a simple struts project as described in the previous example, Struts 2.0 Validation : Annotations
  • Create the new validator by extending the FieldValidatorSupport class
package validators;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class NumberFieldValidator extends FieldValidatorSupport {

public void validate(Object object) throws ValidationException {
	 String fieldName = getFieldName();
	 Object value = this.getFieldValue(fieldName, object);

   if (!(value instanceof String)) {
	   return;
   }

   String str = ((String) value).trim();
   if (str.length() == 0) {
	   return;
   }

   try {
	  Double.parseDouble(str);
   }catch(NumberFormatException nfe) {
	  addFieldError(fieldName, object);
	return;
   }
   try {
	  Integer.parseInt(str);
   }catch(NumberFormatException nfe) {
	  addFieldError(fieldName, object);
	return;
   }

}
}

NumberFieldValidator.java

  • The custom validator may extend the FieldValidatorSupport or the ValidatorSupport classes.
  • The FieldValidatorSupport class extends ValidatorSupport to add field specific information to the Field.
  • The is numeric check is performed by trying to convert the input string to Integer or Double and catching any exception.
  • The addFieldError method is used add any failed validations to the list of errors to be displayed.
  • The getFieldName and getFieldValue methods are implemented in the superclasses to retrieve the field name and field value for the field beign validated.

3. Declare the new custom validator in the validators.xml file. The validators.xml file must be in the classpath of the application.

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE validators PUBLIC
           "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
           "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
      <validators>
       <validator name="numericField" class="validators.NumberFieldValidator"/>
      </validators>

      validators.xml

Note: The name attribute of the validator must match the type attribute of the @CustomValidator Annotation used in the Action class.

4. Add the additional check to the Action class setPrice() method.

   @RequiredStringValidator(type = ValidatorType.FIELD, message = "Price Required")
  @CustomValidator(type = "numericField", message = "Price must be a number")
  public void setPrice(String price) {
   this.price = price;
  }

AddTransactionAction.java

Note: the type attribute of the @CustomValidator Annotation must match the name of the validator as defined in the validators.xml file.

This article is originally posted in Abhi Vuyyuru’s blog.

Comments

comments

About Krishna Srinivasan

He is Founder and Chief Editor of JavaBeat. He has more than 8+ years of experience on developing Web applications. He writes about Spring, DOJO, JSF, Hibernate and many other emerging technologies in this blog.

Comments

  1. Ashish says:

    Sorry guys, this is a lame example. I was looking for something more substantial – example with params and short-circuit

Speak Your Mind

*

Close
Please support the site
By clicking any of these buttons you help our site to get better