You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2010/07/24 11:45:44 UTC
svn commit: r978837 -
/click/trunk/click/framework/src/org/apache/click/control/AbstractControl.java
Author: sabob
Date: Sat Jul 24 09:45:44 2010
New Revision: 978837
URL: http://svn.apache.org/viewvc?rev=978837&view=rev
Log:
deprecated stateful pages. CLK-715
Modified:
click/trunk/click/framework/src/org/apache/click/control/AbstractControl.java
Modified: click/trunk/click/framework/src/org/apache/click/control/AbstractControl.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/AbstractControl.java?rev=978837&r1=978836&r2=978837&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/AbstractControl.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/AbstractControl.java Sat Jul 24 09:45:44 2010
@@ -175,9 +175,6 @@ public abstract class AbstractControl im
/** The listener method name. */
protected String listenerMethod;
- /** Flag indicating whether the control has been registered as an AJAX target. */
- boolean registeredAsAjaxTarget = false;
-
// Constructors -----------------------------------------------------------
/**
@@ -246,21 +243,11 @@ public abstract class AbstractControl im
* <tt>Behavior</tt>s registered, <tt>false</tt> otherwise.
*/
public boolean hasBehaviors() {
- return (behaviors != null && behaviors.size() > 0);
+ return (behaviors != null && !behaviors.isEmpty());
}
/**
* Add the given {@link org.apache.click.Behavior Behavior} to the control.
- * <p/>
- * <b>Stateful Page note:</b> care must be taken not to add duplicate behaviors.
- * Duplicate behaviors can occur if a behavior is <tt>created</tt> and <tt>added</tt>
- * to a Control in the {@link #onInit()} or {@link #onRender()} events.
- * <p/>
- * Instead add the behavior in the stateful Page constructor.
- * If the Behavior must be added during the onInit event, declare the behavior
- * as a Page variable to ensure the <tt>same instance</tt> is added to the Control.
- * Since control behaviors are contained in a Set, adding the same Behavior
- * instance won't lead to duplicates.
*
* @param behavior the behavior to add
*/
@@ -269,8 +256,12 @@ public abstract class AbstractControl im
throw new IllegalArgumentException("Behavior cannot be null");
}
+ // Ensure we register the behavior only once
+ if (!hasBehaviors()) {
+ ControlRegistry.registerAjaxTarget(this);
+ }
+
getBehaviors().add(behavior);
- registerAsAjaxTarget();
}
/**
@@ -586,34 +577,21 @@ public abstract class AbstractControl im
}
/**
- * If a behavior has been attached to this control, it will be registered
- * with the {@link org.apache.click.CallbackDispatcher}.
- * <p/>
- * <b>Please note:</b> a common problem when overriding onInit in
- * subclasses is forgetting to call <em>super.onInit()</em>. Consider
- * carefully whether you should call <em>super.onInit()</em> or not.
+ * This method does nothing. Subclasses may override this method to perform
+ * initialization.
*
* @see org.apache.click.Control#onInit()
*/
public void onInit() {
- // FAQ: Why does onInit need to register callback instead of addBehavior?
- // A: Because on stateful pages addBehavior might only be called once
- // when the control was created so we ensure the behavior is registered
- // before onProcess
- registerAsAjaxTarget();
}
/**
- * Cleans up the AbstractControl state.
- * <p/>
- * <b>Please note:</b> a common problem when overriding onDestroy in
- * subclasses is forgetting to call <em>super.onDestroy()</em>. Consider
- * carefully whether you should call <em>super.onDestroy()</em> or not.
+ * This method does nothing. Subclasses may override this method to perform
+ * clean up any resources.
*
* @see org.apache.click.Control#onDestroy()
*/
public void onDestroy() {
- registeredAsAjaxTarget = false;
}
/**
@@ -1023,23 +1001,6 @@ public abstract class AbstractControl im
return size;
}
- // Package Private Methods ------------------------------------------------
-
- /**
- * Register the control as an AJAX target with the ControlRegistry. If the
- * control is already registered, this method returns silently.
- */
- void registerAsAjaxTarget() {
- if (registeredAsAjaxTarget) {
- return;
- }
-
- if (hasBehaviors()) {
- ControlRegistry.registerAjaxTarget(this);
- registeredAsAjaxTarget = true;
- }
- }
-
// Private Methods --------------------------------------------------------
/**