I'm also not acquaint with Tree classes but this part of #updateTree()'s javadoc makes me this this was the initial design: "However, it is also safe to call this method outside Ajax response."
Now it is not safe. I think the problem in this ticket is that until today a wrong way to get the ART was used. Now it is better. Otherwise the method's javadoc explains it: if this is not Ajax request it is no-op. On Thu, Jun 23, 2011 at 5:37 PM, Juergen Donnerstag <[email protected]> wrote: > but the previous behavior didn't make any sense. Silently do nothing > if no or a wrong request target is provide?!?! updateTree() should be > quick for updateTree(ART.get()). But ART.get() may return false if no > ART is available. And that obviously is an error that should be > reported. > > Juergen > > On Thu, Jun 23, 2011 at 3:43 PM, Martin Grigorov <[email protected]> wrote: >> Hm. This changed previous behavior. >> I think we should preserve the old behavior or remove updateTree() at >> all. The user can use updateTree(ART.get()) which will do nothing if >> ART is null. >> >> On Thu, Jun 23, 2011 at 4:36 PM, <[email protected]> wrote: >>> Author: jdonnerstag >>> Date: Thu Jun 23 13:36:05 2011 >>> New Revision: 1138873 >>> >>> URL: http://svn.apache.org/viewvc?rev=1138873&view=rev >>> Log: >>> fixed: AbstractTree.updateTree() method not works >>> Issue: WICKET-3818 >>> >>> Modified: >>> >>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java >>> >>> Modified: >>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java >>> URL: >>> http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=1138873&r1=1138872&r2=1138873&view=diff >>> ============================================================================== >>> --- >>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java >>> (original) >>> +++ >>> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java >>> Thu Jun 23 13:36:05 2011 >>> @@ -33,6 +33,7 @@ import javax.swing.tree.TreeNode; >>> >>> import org.apache.wicket.Component; >>> import org.apache.wicket.MarkupContainer; >>> +import org.apache.wicket.WicketRuntimeException; >>> import org.apache.wicket.ajax.AjaxRequestTarget; >>> import org.apache.wicket.behavior.Behavior; >>> import org.apache.wicket.markup.ComponentTag; >>> @@ -45,10 +46,10 @@ import org.apache.wicket.markup.html.pan >>> import org.apache.wicket.model.IDetachable; >>> import org.apache.wicket.model.IModel; >>> import org.apache.wicket.model.Model; >>> -import org.apache.wicket.request.IRequestHandler; >>> import org.apache.wicket.request.Response; >>> import org.apache.wicket.request.resource.JavaScriptResourceReference; >>> import org.apache.wicket.request.resource.ResourceReference; >>> +import org.apache.wicket.util.lang.Args; >>> import org.apache.wicket.util.string.AppendingStringBuffer; >>> import org.apache.wicket.util.visit.IVisit; >>> import org.apache.wicket.util.visit.IVisitor; >>> @@ -67,10 +68,6 @@ public abstract class AbstractTree exten >>> TreeModelListener, >>> AjaxRequestTarget.ITargetRespondListener >>> { >>> - >>> - /** >>> - * >>> - */ >>> private static final long serialVersionUID = 1L; >>> >>> /** >>> @@ -1001,21 +998,6 @@ public abstract class AbstractTree exten >>> } >>> >>> /** >>> - * Convenience method that updates changed portions on tree. You >>> can call this method during >>> - * Ajax response, where calling {@link >>> #updateTree(AjaxRequestTarget)} would be appropriate, but >>> - * you don't have the AjaxRequestTarget instance. However, it is >>> also safe to call this method >>> - * outside Ajax response. >>> - */ >>> - public final void updateTree() >>> - { >>> - IRequestHandler handler = >>> getRequestCycle().getActiveRequestHandler(); >>> - if (handler instanceof AjaxRequestTarget) >>> - { >>> - updateTree((AjaxRequestTarget)handler); >>> - } >>> - } >>> - >>> - /** >>> * Allows to intercept adding dirty components to AjaxRequestTarget. >>> * >>> * @param target >>> @@ -1124,6 +1106,24 @@ public abstract class AbstractTree exten >>> } >>> >>> /** >>> + * Convenience method that updates changed portions on tree. You >>> can call this method during >>> + * Ajax response, where calling {@link >>> #updateTree(AjaxRequestTarget)} would be appropriate, but >>> + * you don't have the AjaxRequestTarget instance. However, it is >>> also safe to call this method >>> + * outside Ajax response. >> This comment is no more valid. >>> + */ >>> + public final void updateTree() >>> + { >>> + AjaxRequestTarget handler = AjaxRequestTarget.get(); >>> + if (handler == null) >>> + { >>> + throw new WicketRuntimeException( >>> + "No AjaxRequestTarget available to execute >>> updateTree(ART target)"); >>> + } >>> + >>> + updateTree(handler); >>> + } >>> + >>> + /** >>> * Updates the changed portions of the tree using given >>> AjaxRequestTarget. Call this method if >>> * you modified the tree model during an ajax request target and you >>> want to partially update >>> * the component on page. Make sure that the tree model has fired >>> the proper listener functions. >>> @@ -1135,11 +1135,7 @@ public abstract class AbstractTree exten >>> */ >>> public final void updateTree(final AjaxRequestTarget target) >>> { >>> - if (target == null) >>> - { >>> - return; >>> - } >>> - >>> + Args.notNull(target, "target"); >>> target.registerRespondListener(this); >>> } >>> >>> >>> >>> >> >> >> >> -- >> Martin Grigorov >> jWeekend >> Training, Consulting, Development >> http://jWeekend.com >> > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com
