I've used component#detach() when the code didn't have a reference to the model.

> Maybe we need another callback method in Behavior

A #removed() callback might be useful ... or overkill ;)

Sven

On 01/17/2013 11:33 AM, Martin Grigorov wrote:
On Thu, Jan 17, 2013 at 12:17 PM, Sven Meier <[email protected]> wrote:

         @Override
         public void detach(Component component)
         {
                 AjaxRequestTarget target = component.getRequestCycle().**
find(AjaxRequestTarget.class);
                 if (target != null)
                 {
                         stop(target);
                 }
                 super.detach(component);
         }


A small nitpick:
Removing a component in an ART might not be the only reason why #detach()
is called. A developer might call component#detach() to force a LDM to
reload on the next render.

Very good point!
I'm not sure this is so small. I'd use model.detach() but one could detach
the component ...
Maybe we need another callback method in Behavior



Sven


On 01/17/2013 10:20 AM, [email protected] wrote:

WICKET-4959 Unproperly detached Behavior with TabbedPanels

Stop the Ajax timer behavior when the behavior's component is removed
from the tree


Project: 
http://git-wip-us.apache.org/**repos/asf/wicket/repo<http://git-wip-us.apache.org/repos/asf/wicket/repo>
Commit: 
http://git-wip-us.apache.org/**repos/asf/wicket/commit/**0b78d759<http://git-wip-us.apache.org/repos/asf/wicket/commit/0b78d759>
Tree: 
http://git-wip-us.apache.org/**repos/asf/wicket/tree/0b78d759<http://git-wip-us.apache.org/repos/asf/wicket/tree/0b78d759>
Diff: 
http://git-wip-us.apache.org/**repos/asf/wicket/diff/0b78d759<http://git-wip-us.apache.org/repos/asf/wicket/diff/0b78d759>

Branch: refs/heads/master
Commit: 0b78d759220c1b09abb0d47b500775**7bbfeb4e0c
Parents: e37a9e1
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Thu Jan 17 11:18:22 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Jan 17 11:18:22 2013 +0200

------------------------------**------------------------------**
----------
   .../wicket/ajax/**AbstractAjaxTimerBehavior.java     |   11 +++++++++++
   1 files changed, 11 insertions(+), 0 deletions(-)
------------------------------**------------------------------**
----------


http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
0b78d759/wicket-core/src/main/**java/org/apache/wicket/ajax/**
AbstractAjaxTimerBehavior.java<http://git-wip-us.apache.org/repos/asf/wicket/blob/0b78d759/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java>
------------------------------**------------------------------**
----------
diff --git 
a/wicket-core/src/main/java/**org/apache/wicket/ajax/**AbstractAjaxTimerBehavior.java
b/wicket-core/src/main/java/**org/apache/wicket/ajax/**
AbstractAjaxTimerBehavior.java
index 83edeaa..a80921d 100644
--- a/wicket-core/src/main/java/**org/apache/wicket/ajax/**
AbstractAjaxTimerBehavior.java
+++ b/wicket-core/src/main/java/**org/apache/wicket/ajax/**
AbstractAjaxTimerBehavior.java
@@ -194,4 +194,15 @@ public abstract class AbstractAjaxTimerBehavior
extends AbstractDefaultAjaxBehav
                 String timeoutHandle = getTimeoutHandle();
                 target.prependJavaScript("**
clearTimeout("+timeoutHandle+"**); delete "+timeoutHandle+";");
         }
+
+       @Override
+       public void detach(Component component)
+       {
+               AjaxRequestTarget target = component.getRequestCycle().**
find(AjaxRequestTarget.class);
+               if (target != null)
+               {
+                       stop(target);
+               }
+               super.detach(component);
+       }
   }




Reply via email to