Hi,

> IMHO this should not happen because the link URL includes the page version 
> number and in that version of the page 

for Ajax requests the page id is not increased. So your second non-ajax request 
hits the same page instance with an updated component tree.

For these cases (mixing ajax with non-ajax inside repeaters) it's better to use 
bookmarkable links inside the table - I assume these respond with some kind of 
detail page anyways.

Hope this helps
Sven



Am 22. Juli 2021 11:15:51 MESZ schrieb Tobias Gierke 
<tobias.gie...@code-sourcery.de>:
>Hi,
>
>I'm currently investigating the root cause of a 
>ComponentNotFoundException in our application (Wicket 8.12) that IMHO 
>should not happen in the first place (assuming I understood Wicket page
>
>versioning correctly, that is).
>
>1. The offending page displays search results using a DataTable with 
>non-AJAX links on items in each of the rows plus one "page backwards" 
>and one "page forwards" AJAX link outside of the DataTable to switch to
>
>the next/previous page of results
>
><previous>          <next>
>
>+------ data table ------+
>| <a ..>item1</a>        |
>+------------------------+
>| <a ..>item2</a>        |
>+------------------------+
>| .... etc...            |
>+------------------------+
>
>The crash is happening 100% of the time when doing the following:
>
>1.) Artifically increasing the round-trip time to the server by a lot 
>using NetEM (I'm on Linux), for example to a 400ms RTT:
>
>|tc qdisc add dev lo root handle ||1||:||0| |netem delay 200msec|
>
>2.) Clicking the "previous" or "next" AJAX link on the page
>3.) Immediately afterwards clicking any of the regular links inside the
>
>data table rows without waiting for the AJAX request to complete
>
>This gets me a ComponentNotFoundException
>
>org.apache.wicket.core.request.handler.ComponentNotFoundException: 
>Component 
>'resultList:streamList:streamListTable:body:rows:3:cells:3:cell:link' 
>has been removed from page.
>at 
>org.apache.wicket.core.request.handler.ListenerRequestHandler.respond(ListenerRequestHandler.java:166)
>at 
>org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:907)
>at 
>org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)
>at 
>org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:293)
>at 
>org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:254)
>at 
>org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:276)
>at 
>org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:207)
>
>every time after the AJAX request completes and releases the page lock 
>so the second HTTP request is getting processed. IMHO this should not 
>happen because the link URL (from the regular link inside the data 
>table) includes the page version number and in that version of the page
>
>object graph the Link component should still exist (we've configured
>the 
>PageStore to keep 20 versions).
>
>What am I missing here ? Is this somehow related to mixing AJAX and 
>non-AJAX requests here ? FWIW, the DataTable is using the default 
>ItemReuseStrategy.
>
>Cheers,
>Tobias

Reply via email to