Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-3229

Removing Child in IVisitor affects traversal

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 1.4.12
    • Fix Version/s: 1.4.15, 1.5-RC1
    • Component/s: wicket
    • Labels:
      None

      Description

      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.

        Attachments

        1. WICKET-3229.patch
          5 kB
          Martin Grigorov

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              jbrookover Jacob Brookover
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 0.5h
                0.5h
                Remaining:
                Remaining Estimate - 0.5h
                0.5h
                Logged:
                Time Spent - Not Specified
                Not Specified