Hi,

I came across one behavior that I do not know if is intentional or not.

I have following hierarchy:

 * Panel1
     o ListView
         + Panel2
         + Panel2
         + ...
     o AjaxLink

AjaxLink on click sends to the page event with Breadth broadcast.

Panel1 reacts and adds itself to the AjaxRequestTarget.
Panel2 reacts and adds itself to the AjaxRequestTarget.

Wicket 8.0.0-M8 and 7.10.0 produce warning:

15:25:08.281 [qtp330382173-21] WARN org.apache.wicket.page.XmlPartialPageUpdate - Component '[TestPanel2 [Component id = test]]' with markupid: 'test7' not rendered because it was already removed from page

Wicket 8.0.0-M9 produces exception:

Root cause:

org.apache.wicket.WicketRuntimeException: No Page found for component: [TestPanel2 [Component id = test, page = <No Page>, path = 0:test.TestPanel2]]. You probably forgot to add it to its parent component.
at org.apache.wicket.Component.getPage(Component.java:1702)
at org.apache.wicket.Component.renderPart(Component.java:2206)
at org.apache.wicket.page.XmlPartialPageUpdate.writeComponent(XmlPartialPageUpdate.java:81) at org.apache.wicket.page.PartialPageUpdate.writeComponents(PartialPageUpdate.java:262) at org.apache.wicket.page.PartialPageUpdate.writeTo(PartialPageUpdate.java:162) at org.apache.wicket.ajax.AjaxRequestHandler.respond(AjaxRequestHandler.java:383) at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:912) at org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65) at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:283) at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253) at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221) at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:262) at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:204) at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:286) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1629) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:561)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:334)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:104)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:243) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:679) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:597)
at java.lang.Thread.run(Thread.java:748)



I understand, that it may not be correct to add child and parent to the AjaxRequestTarget at the same time when working with events, though if application is complex enough, it may happen. A while ago I was also getting MarkupNotFoundException, I cannot reproduce it at the moment :). Markup was there, as the component was displayed correctly, exception was thrown during the ajax update, my gut feeling is that those two exceptions will have the same cause - adding the child and the parent at the same time, while child sits in a repeater.

I have three quickstarts ready - 8.0.0-M9, 8.0.0-M8, 7.10.0 , if you want.

Best regards
Vit


Reply via email to