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

TabbedPanel, tabsVisibilityCache throws IndexOutOfBounds

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.4.3
    • None
    • wicket-extensions
    • None

    Description

      With wicket extensions 1.4.3, TabbedPanel throws an IndexOutOfBounds exception on the tabsVisibilityCache array when adding more tabs after the panel is rendered.

      The onBeforeRender method calls the isTabVisible method which initializes an array of booleans for visibility caching. The length of this array is the amount of tabs added at that time. When - through ajax - a new tab is added after rendering and setSelectedTab is called an exception is thrown at:
      Boolean visible = tabsVisibilityCache[tabIndex];

      Fix: increase the array before checking or use a List. In TabbedPanel

      private boolean isTabVisible(int tabIndex)
      {
      if (tabsVisibilityCache == null)

      { tabsVisibilityCache = new Boolean[getTabs().size()]; }

      if (tabsVisibilityCache.length < tabIndex + 1)

      { tabsVisibilityCache = Arrays.copyOf(tabsVisibilityCache, tabIndex + 1); }

      if (tabsVisibilityCache.length > 0)
      {
      Boolean visible = tabsVisibilityCache[tabIndex];

      if (visible == null)

      { visible = getTabs().get(tabIndex).isVisible(); tabsVisibilityCache[tabIndex] = visible; }

      return visible;
      }
      else

      { return false; }

      }

      Attachments

        1. TabbedPanelTest.java
          3 kB
          Thies Arntzen

        Activity

          People

            ivaynberg Igor Vaynberg
            thies Thies Arntzen
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: