- type: Refers to the "name" given to the validator in the validators.xml file.
- message: Message to be displayed when this validator fails.
To run this sample, follow these steps... There's More
- Create a simple struts project as described in the previous example, Struts 2 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.
- 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. - 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.
{ 0 comments... Views All / Send Comment! }
Post a Comment