[ 
https://issues.apache.org/jira/browse/WICKET-3229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12970673#action_12970673
 ] 

Hudson commented on WICKET-3229:
--------------------------------

Integrated in Apache Wicket 1.4.x #322 (See 
[https://hudson.apache.org/hudson/job/Apache%20Wicket%201.4.x/322/])
    

> Removing Child in IVisitor affects traversal
> --------------------------------------------
>
>                 Key: WICKET-3229
>                 URL: https://issues.apache.org/jira/browse/WICKET-3229
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.4.12
>            Reporter: Jacob Brookover
>            Priority: Minor
>             Fix For: 1.4.15, 1.5-M4
>
>         Attachments: WICKET-3229.patch
>
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> Created a Panel that provides it's own dynamically created markup stream, 
> scans that stream for wicket:ids, and adds different components based on the 
> id.  Recently, I've been wanting to redraw this panel via AJAX, changing the 
> markup and adding and removing child components accordingly.
> I tried to remove multiple stale components (e.g. a component that was 
> generated from the previous markup but doesn't exist in the new markup) using 
> an IVisitor..
> visitChildren(new IVisitor<Component>() {
>   public Object component(Component component) {
>     if (/* component is stale */)
>       component.remove();
>     return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
> }
> The IVisitor just does a simple run through an array and removing the 
> component adjusted the size/count of the array, messing up the traversal and 
> preventing other components from being removed.
> Potential Solutions:
> 1.  Throw an exception if the hierarchy is modified in an IVisitor.
> 2.  Use another means of traversing the children that allows addition/removal 
> and still ensures visiting all the children.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to