diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java index 96a3fcf35..0192f4040 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java @@ -535,6 +535,7 @@ public class AnnotationValidationConfigurationBuilder { .shortCircuit(v.shortCircuit()) .defaultMessage(v.message()) .messageKey(v.key()) + .messageParams(v.messageParams()) .build(); } diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/UrlValidator.java b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/UrlValidator.java index 4a9b4a52a..fb6fa3c86 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/UrlValidator.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/UrlValidator.java @@ -55,6 +55,12 @@ import java.lang.annotation.Target; * i18n key from language specific properties file. * * + * messageParams + * no + *   + * Additional params to be used to customize message - will be evaluated against the Value Stack + * + * * fieldName * no *   @@ -101,6 +107,11 @@ public @interface UrlValidator { */ String key() default ""; + /** + * Additional params to be used to customize message - will be evaluated against the Value Stack + */ + String[] messageParams() default {}; + /** * The optional fieldName for SIMPLE validator types. */ diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java index 504651e67..26997ad4b 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java @@ -15,6 +15,7 @@ import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator; import com.opensymphony.xwork2.validator.annotations.ShortRangeFieldValidator; import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator; +import com.opensymphony.xwork2.validator.annotations.UrlValidator; import com.opensymphony.xwork2.validator.annotations.ValidationParameter; /** @@ -57,6 +58,8 @@ public class AnnotationValidationAction extends ActionSupport { messageParams = {"one", "two", "three"}, shortCircuit = true) @StringLengthFieldValidator(fieldName = "foo", key = "stringlength.key", message = "Foo is too long!", maxLength = "10", minLength = "1", shortCircuit = true, trim = false, messageParams = {"one", "two", "three"}) + @UrlValidator(fieldName = "foo", key = "url.key", message = "Foo isn't a valid URL!", shortCircuit = true, + messageParams = {"one", "two", "three"}) public String execute() { return SUCCESS; } diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java index dbb8cb067..0612cd807 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java @@ -27,6 +27,7 @@ import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator; import com.opensymphony.xwork2.validator.validators.RequiredStringValidator; import com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator; import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator; +import com.opensymphony.xwork2.validator.validators.URLValidator; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -48,7 +49,7 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase List validators = manager.getValidators(AnnotationValidationAction.class, null); // then - assertEquals(validators.size(), 14); + assertEquals(validators.size(), 15); for (Validator validator : validators) { validate(validator); } @@ -65,7 +66,7 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack(); valueStack.push(new AnnotationValidationExpAction()); - assertEquals(validators.size(), 14); + assertEquals(validators.size(), 15); for (Validator validator : validators) { validator.setValueStack(valueStack); validate(validator); @@ -101,9 +102,19 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase validateShortRangeFieldValidator((ShortRangeFieldValidator) validator); } else if (validator.getValidatorType().equals("stringlength")) { validateStringLengthFieldValidator((StringLengthFieldValidator) validator); + } else if (validator.getValidatorType().equals("url")) { + validateUrlValidator((URLValidator) validator); } } + private void validateUrlValidator(URLValidator validator) { + assertEquals("foo", validator.getFieldName()); + assertEquals("Foo isn't a valid URL!", validator.getDefaultMessage()); + assertEquals("url.key", validator.getMessageKey()); + assertTrue(Arrays.equals(new String[]{"one", "two", "three"}, validator.getMessageParameters())); + assertEquals(true, validator.isShortCircuit()); + } + private void validateStringLengthFieldValidator(StringLengthFieldValidator validator) { assertEquals("foo", validator.getFieldName()); assertEquals("stringlength.key", validator.getMessageKey()); diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java index bf105f1a2..b50160371 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java @@ -15,6 +15,7 @@ import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator; import com.opensymphony.xwork2.validator.annotations.ShortRangeFieldValidator; import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator; +import com.opensymphony.xwork2.validator.annotations.UrlValidator; import com.opensymphony.xwork2.validator.annotations.ValidationParameter; import java.text.ParseException; @@ -65,6 +66,8 @@ public class AnnotationValidationExpAction extends ActionSupport { @StringLengthFieldValidator(fieldName = "foo", key = "stringlength.key", message = "Foo is too long!", maxLengthExpression = "${maxLength}", minLengthExpression = "${minLength}", shortCircuit = true, trimExpression = "${false}", messageParams = {"one", "two", "three"}) + @UrlValidator(fieldName = "foo", key = "url.key", message = "Foo isn't a valid URL!", shortCircuit = true, + messageParams = {"one", "two", "three"}) public String execute() { return SUCCESS; }