mirror of
https://github.com/apache/struts.git
synced 2026-08-07 07:37:20 +00:00
WW-4001 Improves ConversionErrorFieldValidator annotation to match validator class ConversionErrorFieldValidator
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1457267 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
+2
@@ -799,9 +799,11 @@ public class AnnotationValidationConfigurationBuilder {
|
||||
return new ValidatorConfig.Builder(validatorType)
|
||||
.addParams(params)
|
||||
.addParam("methodName", methodName)
|
||||
.addParam("repopulateField", v.repopulateField())
|
||||
.shortCircuit(v.shortCircuit())
|
||||
.defaultMessage(v.message())
|
||||
.messageKey(v.key())
|
||||
.messageParams(v.messageParams())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
+16
@@ -56,6 +56,12 @@ import java.lang.annotation.Target;
|
||||
* <td class='confluenceTd'>i18n key from language specific properties file.</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td class='confluenceTd'>messageParams</td>
|
||||
* <td class='confluenceTd'>no</td>
|
||||
* <td class='confluenceTd'> </td>
|
||||
* <td class='confluenceTd'>Additional params to be used to customize message - will be evaluated against the Value Stack</td>
|
||||
* </tr>
|
||||
* <tr>
|
||||
* <td class='confluenceTd'>fieldName</td>
|
||||
* <td class='confluenceTd'>no</td>
|
||||
* <td class='confluenceTd'> </td>
|
||||
@@ -102,6 +108,11 @@ public @interface ConversionErrorFieldValidator {
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
@@ -115,6 +126,11 @@ public @interface ConversionErrorFieldValidator {
|
||||
*/
|
||||
boolean shortCircuit() default false;
|
||||
|
||||
/**
|
||||
* Defines to repopulate field or not after validation, default false
|
||||
*/
|
||||
boolean repopulateField() default false;
|
||||
|
||||
/**
|
||||
* The validation type for this field/method.
|
||||
*/
|
||||
|
||||
+6
-8
@@ -136,21 +136,19 @@ public abstract class RepopulateConversionErrorFieldValidatorSupport extends Fie
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(RepopulateConversionErrorFieldValidatorSupport.class);
|
||||
|
||||
private String repopulateFieldAsString = "false";
|
||||
private boolean repopulateFieldAsBoolean = false;
|
||||
private boolean repopulateField = false;
|
||||
|
||||
public String getRepopulateField() {
|
||||
return repopulateFieldAsString;
|
||||
public boolean isRepopulateField() {
|
||||
return repopulateField;
|
||||
}
|
||||
|
||||
public void setRepopulateField(String repopulateField) {
|
||||
this.repopulateFieldAsString = repopulateField == null ? repopulateField : repopulateField.trim();
|
||||
this.repopulateFieldAsBoolean = "true".equalsIgnoreCase(this.repopulateFieldAsString) ? (true) : (false);
|
||||
public void setRepopulateField(boolean repopulateField) {
|
||||
this.repopulateField = repopulateField;
|
||||
}
|
||||
|
||||
public void validate(Object object) throws ValidationException {
|
||||
doValidate(object);
|
||||
if (repopulateFieldAsBoolean) {
|
||||
if (repopulateField) {
|
||||
repopulateField(object);
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -2,6 +2,7 @@ package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionSupport;
|
||||
import com.opensymphony.xwork2.validator.annotations.ConditionalVisitorFieldValidator;
|
||||
import com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
|
||||
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
|
||||
|
||||
/**
|
||||
@@ -15,6 +16,8 @@ public class AnnotationValidationAction extends ActionSupport {
|
||||
@ConditionalVisitorFieldValidator(expression = "foo+bar", context = "some", appendPrefix = false, fieldName = "bar",
|
||||
key = "conditional.key", message = "Foo doesn't match!", shortCircuit = true,
|
||||
messageParams = {"one", "two", "three"})
|
||||
@ConversionErrorFieldValidator(fieldName = "bar", key = "conversion.key", message = "Foo conversion error!",
|
||||
shortCircuit = true, repopulateField = true, messageParams = {"one", "three"})
|
||||
public String execute() {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
+16
-2
@@ -15,6 +15,7 @@ import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.util.ValueStackFactory;
|
||||
import com.opensymphony.xwork2.util.location.LocatableProperties;
|
||||
import com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator;
|
||||
import com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator;
|
||||
import com.opensymphony.xwork2.validator.validators.RegexFieldValidator;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -35,7 +36,7 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase
|
||||
List<Validator> validators = manager.getValidators(AnnotationValidationAction.class, null);
|
||||
|
||||
// then
|
||||
assertEquals(validators.size(), 2);
|
||||
assertEquals(validators.size(), 3);
|
||||
for (Validator validator : validators) {
|
||||
validate(validator);
|
||||
}
|
||||
@@ -52,7 +53,7 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase
|
||||
ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack();
|
||||
valueStack.push(new AnnotationValidationExpAction());
|
||||
|
||||
assertEquals(validators.size(), 2);
|
||||
assertEquals(validators.size(), 3);
|
||||
for (Validator validator : validators) {
|
||||
validator.setValueStack(valueStack);
|
||||
validate(validator);
|
||||
@@ -64,14 +65,27 @@ public class AnnotationValidationConfigurationBuilderTest extends XWorkTestCase
|
||||
validateRegexValidator((RegexFieldValidator) validator);
|
||||
} else if (validator.getValidatorType().equals("conditionalvisitor")) {
|
||||
validateConditionalFieldVisitorValidator((ConditionalVisitorFieldValidator) validator);
|
||||
} else if (validator.getValidatorType().equals("conversion")) {
|
||||
validateConversionFieldErrorVisitorValidator((ConversionErrorFieldValidator) validator);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateConversionFieldErrorVisitorValidator(ConversionErrorFieldValidator validator) {
|
||||
assertEquals("bar", validator.getFieldName());
|
||||
assertEquals("conversion.key", validator.getMessageKey());
|
||||
assertEquals("Foo conversion error!", validator.getDefaultMessage());
|
||||
assertEquals(true, validator.isRepopulateField());
|
||||
assertEquals(true, validator.isShortCircuit());
|
||||
assertTrue(Arrays.equals(new String[]{"one", "three"}, validator.getMessageParameters()));
|
||||
}
|
||||
|
||||
private void validateConditionalFieldVisitorValidator(ConditionalVisitorFieldValidator validator) {
|
||||
assertEquals("foo+bar", validator.getExpression());
|
||||
assertEquals("some", validator.getContext());
|
||||
assertEquals("Foo doesn't match!", validator.getDefaultMessage());
|
||||
assertEquals("bar", validator.getFieldName());
|
||||
assertEquals(false, validator.isAppendPrefix());
|
||||
assertEquals(true, validator.isShortCircuit());
|
||||
assertEquals("conditional.key", validator.getMessageKey());
|
||||
assertTrue(Arrays.equals(new String[]{"one", "two", "three"}, validator.getMessageParameters()));
|
||||
}
|
||||
|
||||
+3
@@ -2,6 +2,7 @@ package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionSupport;
|
||||
import com.opensymphony.xwork2.validator.annotations.ConditionalVisitorFieldValidator;
|
||||
import com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
|
||||
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
|
||||
|
||||
/**
|
||||
@@ -15,6 +16,8 @@ public class AnnotationValidationExpAction extends ActionSupport {
|
||||
@ConditionalVisitorFieldValidator(expression = "foo+bar", context = "some", appendPrefix = false, fieldName = "bar",
|
||||
key = "conditional.key", message = "Foo doesn't match!", shortCircuit = true,
|
||||
messageParams = {"one", "two", "three"})
|
||||
@ConversionErrorFieldValidator(fieldName = "bar", key = "conversion.key", message = "Foo conversion error!",
|
||||
shortCircuit = true, repopulateField = true, messageParams = {"one", "three"})
|
||||
public String execute() {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
+3
-3
@@ -38,7 +38,7 @@ public class RepopulateConversionErrorFieldValidatorSupportTest extends XWorkTes
|
||||
ActionSupport action;
|
||||
|
||||
public void testUseFullFieldName() throws Exception {
|
||||
validator2.setRepopulateField("true");
|
||||
validator2.setRepopulateField(true);
|
||||
validator2.validate(action);
|
||||
|
||||
ActionContext.getContext().getActionInvocation().invoke();
|
||||
@@ -51,7 +51,7 @@ public class RepopulateConversionErrorFieldValidatorSupportTest extends XWorkTes
|
||||
|
||||
public void testGetterSetterGetsCalledApropriately1() throws Exception {
|
||||
|
||||
validator1.setRepopulateField("true");
|
||||
validator1.setRepopulateField(true);
|
||||
validator1.validate(action);
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ public class RepopulateConversionErrorFieldValidatorSupportTest extends XWorkTes
|
||||
|
||||
public void testGetterSetterGetsCalledApropriately2() throws Exception {
|
||||
|
||||
validator1.setRepopulateField("false");
|
||||
validator1.setRepopulateField(false);
|
||||
validator1.validate(action);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user