Author: sylvain
Date: Fri Nov 12 05:38:45 2004
New Revision: 57517
Modified:
cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
Log:
Optimize lazy parsing of value. Tim, I think we finally got it :-)
Modified:
cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
==============================================================================
---
cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
(original)
+++
cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
Fri Nov 12 05:38:45 2004
@@ -201,14 +201,18 @@
// Only convert if the text value actually changed. Otherwise, keep
the old value
// and/or the old validation error (allows to keep errors when
clicking on actions)
if (!(newEnteredValue == null ? "" :
newEnteredValue).equals((enteredValue == null ? "" : enteredValue))) {
- // Make sure the old value has been parsed and validated.
- Object oldValue = getValue();
+
+ // If we have some value-changed listeners, we must make sure the
current value has been
+ // parsed, to fill the event. Otherwise, we don't need to spend
that extra CPU time.
+ boolean hasListeners = hasValueChangedListeners();
+ Object oldValue = hasListeners ? getValue() : null;
+
enteredValue = newEnteredValue;
validationError = null;
value = null;
this.valueState = VALUE_UNPARSED;
- if (hasValueChangedListeners()) {
+ if (hasListeners) {
// Throw an event that will hold the old value and
// will lazily compute the new value only if needed.
getForm().addWidgetEvent(new DeferredValueChangedEvent(this,
oldValue));