- 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.
No comments:
Post a Comment