From a4eb0803dcfc5d7e502e453ba862ed2eefc9df8d Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 18 Mar 2013 12:00:22 +0000 Subject: [PATCH] WW-4009 Improves RequiredFieldValidator annotation to match RequiredFieldValidator class git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1457722 13f79535-47bb-0310-9956-ffa450edef68 --- .../AnnotationValidationConfigurationBuilder.java | 1 + .../annotations/RequiredFieldValidator.java | 11 +++++++++++ .../validator/AnnotationValidationAction.java | 3 +++ ...otationValidationConfigurationBuilderTest.java | 15 +++++++++++++-- .../validator/AnnotationValidationExpAction.java | 3 +++ 5 files changed, 31 insertions(+), 2 deletions(-) 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 511efb9ee..9ad9e9f32 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 @@ -629,6 +629,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/RequiredFieldValidator.java b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RequiredFieldValidator.java index 7ff4a96c1..3039d3cbc 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RequiredFieldValidator.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RequiredFieldValidator.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 *   @@ -102,6 +108,11 @@ public @interface RequiredFieldValidator { */ 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 d01bb4268..dfc17ac1a 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 @@ -11,6 +11,7 @@ import com.opensymphony.xwork2.validator.annotations.ExpressionValidator; import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator; import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator; import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator; +import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; import com.opensymphony.xwork2.validator.annotations.ValidationParameter; /** @@ -45,6 +46,8 @@ public class AnnotationValidationAction extends ActionSupport { messageParams = {"one", "two", "three"}, shortCircuit = true) @IntRangeFieldValidator(fieldName = "foo", key = "int.key", message = "Foo is out of range!", max = "10", min = "1", messageParams = {"one", "two", "three"}, shortCircuit = true) + @RequiredFieldValidator(fieldName = "foo", key = "required.key", message = "Foo is required!", + messageParams = {"one", "two", "three"}, shortCircuit = true) 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 7f141a103..62e2dcfd7 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 @@ -23,6 +23,7 @@ import com.opensymphony.xwork2.validator.validators.ExpressionValidator; import com.opensymphony.xwork2.validator.validators.FieldExpressionValidator; import com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator; import com.opensymphony.xwork2.validator.validators.RegexFieldValidator; +import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -44,7 +45,7 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase List validators = manager.getValidators(AnnotationValidationAction.class, null); // then - assertEquals(validators.size(), 10); + assertEquals(validators.size(), 11); for (Validator validator : validators) { validate(validator); } @@ -61,7 +62,7 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack(); valueStack.push(new AnnotationValidationExpAction()); - assertEquals(validators.size(), 10); + assertEquals(validators.size(), 11); for (Validator validator : validators) { validator.setValueStack(valueStack); validate(validator); @@ -89,9 +90,19 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase validateFieldExpressionValidator((FieldExpressionValidator) validator); } else if (validator.getValidatorType().equals("int")) { validateIntRangeFieldValidator((IntRangeFieldValidator) validator); + } else if (validator.getValidatorType().equals("required")) { + validateRequiredFieldValidator((RequiredFieldValidator) validator); } } + private void validateRequiredFieldValidator(RequiredFieldValidator validator) { + assertEquals("foo", validator.getFieldName()); + assertEquals("Foo is required!", validator.getDefaultMessage()); + assertEquals("required.key", validator.getMessageKey()); + assertTrue(Arrays.equals(new String[]{"one", "two", "three"}, validator.getMessageParameters())); + assertEquals(true, validator.isShortCircuit()); + } + private void validateIntRangeFieldValidator(IntRangeFieldValidator validator) { assertEquals("foo", validator.getFieldName()); assertEquals("int.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 9396a1d2e..b9abf4179 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 @@ -11,6 +11,7 @@ import com.opensymphony.xwork2.validator.annotations.ExpressionValidator; import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator; import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator; import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator; +import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; import com.opensymphony.xwork2.validator.annotations.ValidationParameter; import java.text.ParseException; @@ -51,6 +52,8 @@ public class AnnotationValidationExpAction extends ActionSupport { @IntRangeFieldValidator(fieldName = "foo", key = "int.key", message = "Foo is out of range!", maxExpression = "${intMax}", minExpression = "${intMin}", messageParams = {"one", "two", "three"}, shortCircuit = true) + @RequiredFieldValidator(fieldName = "foo", key = "required.key", message = "Foo is required!", + messageParams = {"one", "two", "three"}, shortCircuit = true) public String execute() { return SUCCESS; }