Wicket
  1. Wicket
  2. WICKET-5209

NPE when using ComponentRenderer.renderComponent on a panel with <wicket:enclosure>

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 6.8.0
    • Fix Version/s: 6.9.0, 7.0.0-M1
    • Component/s: wicket
    • Labels:
      None

      Description

      Hi,

      Consider this example:
      <wicket:panel>
      <wicket:enclosure child="externalLink">
      <a wicket:id="externalLink">Link</a>
      </wicket:enclosure>
      </wicket:panel>

      When trying to render such a panel with ComponentRenderer.renderComponent, a NPE is thrown because Wicket try to render Enclosure without initializing it.

      Root cause:
      java.lang.NullPointerException
      at org.apache.wicket.markup.html.internal.Enclosure.isVisible(Enclosure.java:143)
      at org.apache.wicket.Component.determineVisibility(Component.java:4363)
      at org.apache.wicket.Component.internalBeforeRender(Component.java:916)
      at org.apache.wicket.Component.beforeRender(Component.java:991)
      at org.apache.wicket.Component.internalPrepareForRender(Component.java:2214)
      at org.apache.wicket.Component.render(Component.java:2303)
      at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1390)
      at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1554)
      at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1529)
      at org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:689)
      at org.apache.wicket.markup.html.panel.AssociatedMarkupSourcingStrategy.renderAssociatedMarkup(AssociatedMarkupSourcingStrategy.java:76)
      at org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy.onComponentTagBody(PanelMarkupSourcingStrategy.java:112)
      at org.apache.wicket.Component.internalRenderComponent(Component.java:2549)
      ... 29 more

      See the attached quickstart.

      I've looked a little into it, and it seems that RenderPage (used by ComponentRenderer to render components) is never initialized.
      Therefore the panel's children are never initialized too (see MarkupContainer l.930), and this causes Enclosure to have a null childComponent.

      Thanks.

        Activity

        No work has yet been logged on this issue.

          People

          • Assignee:
            Martin Grigorov
            Reporter:
            GLEIZES Stephane
          • Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development