Hi, We found that using InlineEnclosure doesn't remove the controlling component from the map with components to be re-rendered. org.apache.wicket.protocol.http.AjaxEnclosureListener#onBeforeRespond adds the InlineEnclosure to the ajax target and this leads to Ajax response like:
<?xml version="1.0" encoding="UTF-8"?> <ajax-response> <component id="cc7" ><![CDATA[<div wicket:id="cc" id="cc7">New CC</div>]]></component> <component id="wicket__InlineEnclosure_06" ><![CDATA[<div wicket:enclosure="cc" id="wicket__InlineEnclosure_06"> Before<br/> <div wicket:id="cc" id="cc7">New CC</div> After<br/> </div>]]> </component> </ajax-response> I.e. the controlling component (cc7) is rendered twice in the server and replaced twice in the browser. At org.apache.wicket.ajax.XmlAjaxResponse#fireOnBeforeRespondListeners Wicket passes an unmodifiable map to all registered listeners and thus a listener cannot remove entries from the map. Later org.apache.wicket.ajax.AbstractAjaxResponse#writeComponents() removes any component which has a parent also added for repainting but as you may know Enclosures are not visible in the hierarchy and the filtering doesn't work in this case. At the moment I see two solutions: 1) pass the original and modifiable map to the listeners so they can manipulate it 2) move the code of org.apache.wicket.protocol.http.AjaxEnclosureListener#onBeforeRespond inside AjaxRequestHandler and work with the modifiable map I like the first one better but the listeners were working with non-modifiable map since their day one. Do you have better solutions ? https://issues.apache.org/jira/browse/WICKET-5302
