[jira] [Commented] (WICKET-6246) WebSocket request while Ajax request leads to error regarding HtmlHeaderCotnainer
[ https://issues.apache.org/jira/browse/WICKET-6246?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15506452#comment-15506452 ] ASF subversion and git services commented on WICKET-6246: - Commit 664424a612c337ec200b276e0ec710fdd40b6ebc in wicket's branch refs/heads/wicket-6.x from [~svenmeier] [ https://git-wip-us.apache.org/repos/asf?p=wicket.git;h=664424a ] WICKET-6246 backport change from WICKET-6162 replace original header container > WebSocket request while Ajax request leads to error regarding > HtmlHeaderCotnainer > - > > Key: WICKET-6246 > URL: https://issues.apache.org/jira/browse/WICKET-6246 > Project: Wicket > Issue Type: Bug > Components: wicket >Affects Versions: 6.24.0 >Reporter: Thomas Chrenko >Assignee: Sven Meier > Labels: header, header-contribution > Fix For: 6.25.0 > > Attachments: quickstart.zip > > > There is a problem with header contribution with leads to a "Cannot replace a > component which has not been added: id='_header_'" error. > Short: > - Add at least two components to an AjaxRequestTarget > - The (at least) second component must initiate a WebSocket push update of > another component in onConfigure/onBeforeRender (maybe others) > - Exception at the end of ajax request (WebSocket request finishes without > problem) > Long: > AbstractAjaxResponse iterates all components to update in > writeComponents(Response, String). > For each component writeComponent(Response, String, Component, String) is > called in sub class XmlAjaxResponse which calls > writeHeaderContribution(Response, Component) of AbstractAjaxResponse. > This method creates the HtmlHeaderContainer and adds is to the page when > rendering of first component added to target starts. > Second component rendering (onConfigure/onBeforeRender) send a component > update via websocket push to the client. > The websocket request replaces the HtmlHeaderContainer added to the page and > at the end of the AbstractAjaxResponse.writeTo(Response, String) to header is > again replaced with a default one. > But this default header is removed on MarkupContainer.detachChildren() method. > Now the ajax request is "continued" and writeHeaderContribution is called for > the second component. > header is not null in writeHeaderContribution because it was already created > when processing the first component, so the header is not added to the page > again (remember it was replaced while websocket request). > Now at the end of writeTo method, wicket tries again to replace the header > with a default one (comment there says "restore normal header"). > This leads to an exception: Cannot replace a component which has not been > added: id='_header_' > A little notice: > The error would not happen, if second component would be processed before > first component, because then the HeaderContainerItem of the ajax request > isn't craeted before the websocket request is finished and so the header is > added to the page on creation. So the problem is the removal of the > HeaderContainerItem in detachChildren() after websocket request. > In Wicket 7.4 (the only one i tested, this works without problems) -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (WICKET-6246) WebSocket request while Ajax request leads to error regarding HtmlHeaderCotnainer
[ https://issues.apache.org/jira/browse/WICKET-6246?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15505737#comment-15505737 ] Sven Meier commented on WICKET-6246: Thanks! I'll try to find the difference to 7.x and why it works there. > WebSocket request while Ajax request leads to error regarding > HtmlHeaderCotnainer > - > > Key: WICKET-6246 > URL: https://issues.apache.org/jira/browse/WICKET-6246 > Project: Wicket > Issue Type: Bug > Components: wicket >Affects Versions: 6.24.0 >Reporter: Thomas Chrenko > Labels: header, header-contribution > Attachments: quickstart.zip > > > There is a problem with header contribution with leads to a "Cannot replace a > component which has not been added: id='_header_'" error. > Short: > - Add at least two components to an AjaxRequestTarget > - The (at least) second component must initiate a WebSocket push update of > another component in onConfigure/onBeforeRender (maybe others) > - Exception at the end of ajax request (WebSocket request finishes without > problem) > Long: > AbstractAjaxResponse iterates all components to update in > writeComponents(Response, String). > For each component writeComponent(Response, String, Component, String) is > called in sub class XmlAjaxResponse which calls > writeHeaderContribution(Response, Component) of AbstractAjaxResponse. > This method creates the HtmlHeaderContainer and adds is to the page when > rendering of first component added to target starts. > Second component rendering (onConfigure/onBeforeRender) send a component > update via websocket push to the client. > The websocket request replaces the HtmlHeaderContainer added to the page and > at the end of the AbstractAjaxResponse.writeTo(Response, String) to header is > again replaced with a default one. > But this default header is removed on MarkupContainer.detachChildren() method. > Now the ajax request is "continued" and writeHeaderContribution is called for > the second component. > header is not null in writeHeaderContribution because it was already created > when processing the first component, so the header is not added to the page > again (remember it was replaced while websocket request). > Now at the end of writeTo method, wicket tries again to replace the header > with a default one (comment there says "restore normal header"). > This leads to an exception: Cannot replace a component which has not been > added: id='_header_' > A little notice: > The error would not happen, if second component would be processed before > first component, because then the HeaderContainerItem of the ajax request > isn't craeted before the websocket request is finished and so the header is > added to the page on creation. So the problem is the removal of the > HeaderContainerItem in detachChildren() after websocket request. > In Wicket 7.4 (the only one i tested, this works without problems) -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (WICKET-6246) WebSocket request while Ajax request leads to error regarding HtmlHeaderCotnainer
[ https://issues.apache.org/jira/browse/WICKET-6246?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15505701#comment-15505701 ] Thomas Chrenko commented on WICKET-6246: The stackoverflow.com question where it all started: http://stackoverflow.com/questions/39511880/apache-wicket-push-websocket-component-update-while-ajax-request-rendering > WebSocket request while Ajax request leads to error regarding > HtmlHeaderCotnainer > - > > Key: WICKET-6246 > URL: https://issues.apache.org/jira/browse/WICKET-6246 > Project: Wicket > Issue Type: Bug > Components: wicket >Affects Versions: 6.24.0 >Reporter: Thomas Chrenko > Labels: header, header-contribution > Attachments: quickstart.zip > > > There is a problem with header contribution with leads to a "Cannot replace a > component which has not been added: id='_header_'" error. > Short: > - Add at least two components to an AjaxRequestTarget > - The (at least) second component must initiate a WebSocket push update of > another component in onConfigure/onBeforeRender (maybe others) > - Exception at the end of ajax request (WebSocket request finishes without > problem) > Long: > AbstractAjaxResponse iterates all components to update in > writeComponents(Response, String). > For each component writeComponent(Response, String, Component, String) is > called in sub class XmlAjaxResponse which calls > writeHeaderContribution(Response, Component) of AbstractAjaxResponse. > This method creates the HtmlHeaderContainer and adds is to the page when > rendering of first component added to target starts. > Second component rendering (onConfigure/onBeforeRender) send a component > update via websocket push to the client. > The websocket request replaces the HtmlHeaderContainer added to the page and > at the end of the AbstractAjaxResponse.writeTo(Response, String) to header is > again replaced with a default one. > But this default header is removed on MarkupContainer.detachChildren() method. > Now the ajax request is "continued" and writeHeaderContribution is called for > the second component. > header is not null in writeHeaderContribution because it was already created > when processing the first component, so the header is not added to the page > again (remember it was replaced while websocket request). > Now at the end of writeTo method, wicket tries again to replace the header > with a default one (comment there says "restore normal header"). > This leads to an exception: Cannot replace a component which has not been > added: id='_header_' > A little notice: > The error would not happen, if second component would be processed before > first component, because then the HeaderContainerItem of the ajax request > isn't craeted before the websocket request is finished and so the header is > added to the page on creation. So the problem is the removal of the > HeaderContainerItem in detachChildren() after websocket request. > In Wicket 7.4 (the only one i tested, this works without problems) -- This message was sent by Atlassian JIRA (v6.3.4#6332)