You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by br...@apache.org on 2003/10/08 12:03:19 UTC
cvs commit: cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/formmodel Field.java
bruno 2003/10/08 03:03:19
Modified: src/blocks/woody/java/org/apache/cocoon/woody/formmodel
Field.java
Log:
Fixed problem with endless loop while validating reported by Antonio
Revision Changes Path
1.12 +26 -16 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/formmodel/Field.java
Index: Field.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/formmodel/Field.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- Field.java 25 Sep 2003 17:37:30 -0000 1.11
+++ Field.java 8 Oct 2003 10:03:19 -0000 1.12
@@ -88,7 +88,8 @@
// but need to validate (error if field is required)
private boolean needsParse = true;
private boolean needsValidate = true;
-
+ private boolean isValidating = false;
+
private ValidationError validationError;
public Field(FieldDefinition fieldDefinition) {
@@ -135,24 +136,33 @@
}
}
}
-
+
+ // if getValue() is called on this field while we're validating, then it's because a validation
+ // rule called getValue(), so then we just return the parsed (but not validated) value to avoid an endless loop
+ if (isValidating)
+ return value;
+
// Validate the value
if (this.needsValidate) {
-
- // Clear error, it will be recomputed
- this.validationError = null;
-
- if (this.value == null) {
- // No value : is it required ?
- if (this.definition.isRequired()) {
- this.validationError = new ValidationError("general.field-required");
+ isValidating = true;
+ try {
+ // Clear error, it will be recomputed
+ this.validationError = null;
+
+ if (this.value == null) {
+ // No value : is it required ?
+ if (this.definition.isRequired()) {
+ this.validationError = new ValidationError("general.field-required");
+ }
+
+ } else {
+ this.validationError = definition.getDatatype().validate(value, new ExpressionContextImpl(this));
}
-
- } else {
- this.validationError = definition.getDatatype().validate(value, new ExpressionContextImpl(this));
+
+ this.needsValidate = false;
+ } finally {
+ isValidating = false;
}
-
- this.needsValidate = false;
}
return this.validationError == null ? this.value : null;