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.