You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/12/20 20:47:02 UTC
svn commit: r1424652 - in /struts/struts2/trunk/xwork-core/src:
main/java/com/opensymphony/xwork2/validator/validators/
test/java/com/opensymphony/xwork2/validator/validators/
Author: lukaszlenart
Date: Thu Dec 20 19:47:02 2012
New Revision: 1424652
URL: http://svn.apache.org/viewvc?rev=1424652&view=rev
Log:
WW-3890 adds support for expression in specifying min and max constraints
Added:
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java
- copied, changed from r1424643, struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java?rev=1424652&r1=1424651&r2=1424652&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java Thu Dec 20 19:47:02 2012
@@ -68,8 +68,6 @@ package com.opensymphony.xwork2.validato
* <!-- END SNIPPET: examples -->
* </pre>
*
- *
- *
* @author Jason Carreira
* @version $Date$ $Id$
*/
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java?rev=1424652&r1=1424651&r2=1424652&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java Thu Dec 20 19:47:02 2012
@@ -15,7 +15,6 @@
*/
package com.opensymphony.xwork2.validator.validators;
-
/**
* <!-- START SNIPPET: javadoc -->
* Field Validator that checks if the long specified is within a certain range.
@@ -24,69 +23,90 @@ package com.opensymphony.xwork2.validato
*
* <!-- START SNIPPET: parameters -->
* <ul>
- * <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li>
- * <li>min - the minimum value (if none is specified, it will not be checked) </li>
- * <li>max - the maximum value (if none is specified, it will not be checked) </li>
+ * <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li>
+ * <li>min - the minimum value (if none is specified, it will not be checked) </li>
+ * <li>max - the maximum value (if none is specified, it will not be checked) </li>
* </ul>
+ *
+ * The min / max value can be specified as an expression, but then you must also enable parsing it by specifying <strong>parse</strong> param
+ * as in the example below.
+ * WARNING! Do not use ${min} and ${max} as an expression as this will turn into infinitive loop!
+ *
* <!-- END SNIPPET: parameters -->
*
*
* <pre>
* <!-- START SNIPPET: examples -->
- * <validators>
- * <!-- Plain Validator Syntax -->
- * <validator type="long">
- * <param name="fieldName">age</param>
- * <param name="min">20</param>
- * <param name="max">50</param>
- * <message>Age needs to be between ${min} and ${max}</message>
- * </validator>
- *
- * <!-- Field Validator Syntax -->
- * <field name="age">
- * <field-validator type="long">
- * <param name="min">20</param>
- * <param name="max">50</param>
- * <message>Age needs to be between ${min} and ${max}</message>
- * </field-validator>
- * </field>
- * </validators>
+ * <validators>
+ * <!-- Plain Validator Syntax -->
+ * <validator type="long">
+ * <param name="fieldName">age</param>
+ * <param name="min">20</param>
+ * <param name="max">50</param>
+ * <message>Age needs to be between ${min} and ${max}</message>
+ * </validator>
+ *
+ * <!-- Field Validator Syntax -->
+ * <field name="age">
+ * <field-validator type="long">
+ * <param name="min">20</param>
+ * <param name="max">50</param>
+ * <message>Age needs to be between ${min} and ${max}</message>
+ * </field-validator>
+ * </field>
+ *
+ * <!-- Field Validator Syntax with expression -->
+ * <field name="age">
+ * <field-validator type="long">
+ * <param name="parse">true</param>
+ * <param name="${minValue}">20</param> <!-- will be evaluated as: Long getMinValue() -->
+ * <param name="${maxValue}">50</param> <!-- will be evaluated as: Long getMaxValue() -->
+ * <message>Age needs to be between ${min} and ${max}</message>
+ * </field-validator>
+ * </field>
+ * </validators>
* <!-- END SNIPPET: examples -->
* </pre>
- *
- *
- *
+ *
* @version $Date$
*/
-public class LongRangeFieldValidator extends AbstractRangeValidator {
+public class LongRangeFieldValidator extends AbstractRangeValidator<Long> {
- Long max = null;
- Long min = null;
+ String max = null;
+ String min = null;
-
- public void setMax(Long max) {
+ public void setMax(String max) {
this.max = max;
}
- public Long getMax() {
- return max;
+ public String getMax() {
+ return safeConditionalParse(max);
}
@Override
- public Comparable getMaxComparatorValue() {
- return max;
+ public Long getMaxComparatorValue() {
+ return parseLong(getMax());
}
- public void setMin(Long min) {
+ public void setMin(String min) {
this.min = min;
}
- public Long getMin() {
- return min;
+ public String getMin() {
+ return safeConditionalParse(min);
}
@Override
- public Comparable getMinComparatorValue() {
- return min;
+ public Long getMinComparatorValue() {
+ return parseLong(getMin());
+ }
+
+ private Long parseLong(String value) {
+ if (value != null) {
+ return Long.parseLong(value);
+ } else {
+ return null;
+ }
}
+
}
Copied: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java (from r1424643, struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java)
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java?p2=struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java&p1=struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java&r1=1424643&r2=1424652&rev=1424652&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java Thu Dec 20 19:47:02 2012
@@ -6,13 +6,13 @@ import com.opensymphony.xwork2.util.Valu
import com.opensymphony.xwork2.validator.GenericValidatorContext;
import com.opensymphony.xwork2.validator.ValidatorContext;
-public class IntRangeFieldValidatorTest extends XWorkTestCase {
+public class LongRangeFieldValidatorTest extends XWorkTestCase {
public void testPassValidation() throws Exception {
// given
ValidationAction action = prepareAction(100);
ValidatorContext context = new GenericValidatorContext(action);
- IntRangeFieldValidator validator = prepareValidator(action, context);
+ LongRangeFieldValidator validator = prepareValidator(action, context);
// when
validator.validate(action);
@@ -25,49 +25,49 @@ public class IntRangeFieldValidatorTest
// given
ValidationAction action = prepareAction(98);
ValidatorContext context = new GenericValidatorContext(action);
- IntRangeFieldValidator validator = prepareValidator(action, context);
+ LongRangeFieldValidator validator = prepareValidator(action, context);
// when
validator.validate(action);
// then
assertTrue(context.getFieldErrors().size() == 1);
- assertEquals("Max is 101, min is 99 but value is 98", context.getFieldErrors().get("intRange").get(0));
+ assertEquals("Max is 101, min is 99 but value is 98", context.getFieldErrors().get("longRange").get(0));
}
public void testMaxValidation() throws Exception {
// given
ValidationAction action = prepareAction(102);
ValidatorContext context = new GenericValidatorContext(action);
- IntRangeFieldValidator validator = prepareValidator(action, context);
+ LongRangeFieldValidator validator = prepareValidator(action, context);
// when
validator.validate(action);
// then
assertTrue(context.getFieldErrors().size() == 1);
- assertEquals("Max is 101, min is 99 but value is 102", context.getFieldErrors().get("intRange").get(0));
+ assertEquals("Max is 101, min is 99 but value is 102", context.getFieldErrors().get("longRange").get(0));
}
- private ValidationAction prepareAction(int intRange) {
+ private ValidationAction prepareAction(long longRange) {
ValidationAction action = new ValidationAction();
- action.setIntMaxValue(101);
- action.setIntMinValue(99);
- action.setIntRange(intRange);
+ action.setLongMaxValue(101L);
+ action.setLongMinValue(99L);
+ action.setLongRange(longRange);
return action;
}
- private IntRangeFieldValidator prepareValidator(ValidationAction action, ValidatorContext context) {
- IntRangeFieldValidator validator = new IntRangeFieldValidator();
- validator.setMax("${intMaxValue}");
- validator.setMin("${intMinValue}");
+ private LongRangeFieldValidator prepareValidator(ValidationAction action, ValidatorContext context) {
+ LongRangeFieldValidator validator = new LongRangeFieldValidator();
+ validator.setMax("${longMaxValue}");
+ validator.setMin("${longMinValue}");
ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack();
valueStack.push(action);
validator.setValueStack(valueStack);
validator.setValidatorContext(context);
- validator.setFieldName("intRange");
+ validator.setFieldName("longRange");
validator.setParse(true);
- validator.setDefaultMessage("Max is ${intMaxValue}, min is ${intMinValue} but value is ${intRange}");
+ validator.setDefaultMessage("Max is ${longMaxValue}, min is ${longMinValue} but value is ${longRange}");
return validator;
}
Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java?rev=1424652&r1=1424651&r2=1424652&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java Thu Dec 20 19:47:02 2012
@@ -10,6 +10,10 @@ public class ValidationAction {
private Short shortMinValue;
private Short shortMaxValue;
+ private Long longRange;
+ private Long longMinValue;
+ private Long longMaxValue;
+
public Integer getIntRange() {
return intRange;
}
@@ -57,4 +61,29 @@ public class ValidationAction {
public void setShortMaxValue(Short shortMaxValue) {
this.shortMaxValue = shortMaxValue;
}
+
+ public Long getLongRange() {
+ return longRange;
+ }
+
+ public void setLongRange(Long longRange) {
+ this.longRange = longRange;
+ }
+
+ public Long getLongMinValue() {
+ return longMinValue;
+ }
+
+ public void setLongMinValue(Long longMinValue) {
+ this.longMinValue = longMinValue;
+ }
+
+ public Long getLongMaxValue() {
+ return longMaxValue;
+ }
+
+ public void setLongMaxValue(Long longMaxValue) {
+ this.longMaxValue = longMaxValue;
+ }
+
}