His,

We have a weird case of using GWT that causes many head aches. A
couple of GWT components are being attached to divs of a website
segment that is periodically rerendered per richfaces ajax call. When
that happens the widget is not visible anymore since the original
parent html element gets replaced. The workaround (mainly because of
IE problems) is to create a new copy of widget and attach it to the
new element. It works well so far, but when you exist the website (in
our case it's an automatic logout after so many minutes) an
com.google.gwt.user.client.ui.AttachDetachException comes in IE 7 and
8.

My understanding is that GWT framework tries to deattach all the
widgets at that point and fails to deattach orphan widgets (that are
being caused by rerendering). Is there a workaround to hide this
message (try catch it somewhere) or maybe there is a better way of
dealing with orphan widgets (it's actually a hierarchy of widgets
attached to each other and then to RootPanel).

Thank you.

(full stacktrace below)

 [ERROR] Uncaught exception escaped
com.google.gwt.user.client.ui.AttachDetachException: One or more
exceptions caught, see full set in
AttachDetachException#getCauses         at
com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:
85)         at
com.google.gwt.user.client.ui.RootPanel.detachWidgets(RootPanel.java:
240)         at com.google.gwt.user.client.ui.RootPanel
$2.onClose(RootPanel.java:265)         at
com.google.gwt.event.logical.shared.CloseEvent.dispatch(CloseEvent.java:
112)         at
com.google.gwt.event.logical.shared.CloseEvent.dispatch(CloseEvent.java:
1)         at com.google.gwt.event.shared.HandlerManager
$HandlerRegistry.fireEvent(HandlerManager.java:65)         at
com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access
$1(HandlerManager.java:53)         at
com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:
178)         at
com.google.gwt.event.logical.shared.CloseEvent.fire(CloseEvent.java:
56)         at
com.google.gwt.event.logical.shared.CloseEvent.fire(CloseEvent.java:
41)         at com.google.gwt.user.client.Window.onClosed(Window.java:
780)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)         at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)         at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)         at java.lang.reflect.Method.invoke(Method.java:
597)         at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)         at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)         at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)         at
com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:
1713)         at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:
165)         at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:
120)         at
com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
507)         at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:
264)         at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:
91)         at
com.google.gwt.core.client.impl.Impl.apply(Impl.java)         at
com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)         at
sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)         at java.lang.reflect.Method.invoke(Method.java:
597)         at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)         at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)         at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)         at
com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:
1668)         at
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:
401)         at
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:
222)         at java.lang.Thread.run(Thread.java:662) Caused by:
com.google.gwt.user.client.ui.AttachDetachException: One or more
exceptions caught, see full set in
AttachDetachException#getCauses         at
com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:
85)         at
com.google.gwt.user.client.ui.Panel.doDetachChildren(Panel.java:
167)         at
com.google.gwt.user.client.ui.Widget.onDetach(Widget.java:333)
at com.google.gwt.user.client.ui.RootPanel$1.execute(RootPanel.java:
72)         at
com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:
72)         at
com.google.gwt.user.client.ui.RootPanel.detachWidgets(RootPanel.java:
240)         at com.google.gwt.user.client.ui.RootPanel
$2.onClose(RootPanel.java:265)         at
com.google.gwt.event.logical.shared.CloseEvent.dispatch(CloseEvent.java:
112)         at
com.google.gwt.event.logical.shared.CloseEvent.dispatch(CloseEvent.java:
1)         at com.google.gwt.event.shared.HandlerManager
$HandlerRegistry.fireEvent(HandlerManager.java:65)         at
com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access
$1(HandlerManager.java:53)         at
com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:
178)         at
com.google.gwt.event.logical.shared.CloseEvent.fire(CloseEvent.java:
56)         at
com.google.gwt.event.logical.shared.CloseEvent.fire(CloseEvent.java:
41)         at com.google.gwt.user.client.Window.onClosed(Window.java:
780)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)         at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)         at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)         at java.lang.reflect.Method.invoke(Method.java:
597)         at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)         at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)         at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)         at
com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:
1713)         at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:
165)         at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:
120)         at
com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
507)         at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:
264)         at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:
91)         at
com.google.gwt.core.client.impl.Impl.apply(Impl.java)         at
com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)         at
sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)         at java.lang.reflect.Method.invoke(Method.java:
597)         at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)         at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)         at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)         at
com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:
1668)         at
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:
401)         at
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:
222)         at java.lang.Thread.run(Thread.java:662) Caused by:
java.lang.IllegalStateException: Should only call onDetach when the
widget is attached to the browser's document         at
com.google.gwt.user.client.ui.Widget.onDetach(Widget.java:322)
at com.google.gwt.user.client.ui.Composite.onDetach(Composite.java:
122)         at com.google.gwt.user.client.ui.AttachDetachException
$2.execute(AttachDetachException.java:41)         at
com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:
72)         at
com.google.gwt.user.client.ui.Panel.doDetachChildren(Panel.java:
167)         at
com.google.gwt.user.client.ui.Widget.onDetach(Widget.java:333)
at com.google.gwt.user.client.ui.RootPanel$1.execute(RootPanel.java:
72)         at
com.google.gwt.user.client.ui.AttachDetachException.tryCommand(AttachDetachException.java:
72)         at
com.google.gwt.user.client.ui.RootPanel.detachWidgets(RootPanel.java:
240)         at com.google.gwt.user.client.ui.RootPanel
$2.onClose(RootPanel.java:265)         at
com.google.gwt.event.logical.shared.CloseEvent.dispatch(CloseEvent.java:
112)         at
com.google.gwt.event.logical.shared.CloseEvent.dispatch(CloseEvent.java:
1)         at com.google.gwt.event.shared.HandlerManager
$HandlerRegistry.fireEvent(HandlerManager.java:65)         at
com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access
$1(HandlerManager.java:53)         at
com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:
178)         at
com.google.gwt.event.logical.shared.CloseEvent.fire(CloseEvent.java:
56)         at
com.google.gwt.event.logical.shared.CloseEvent.fire(CloseEvent.java:
41)         at com.google.gwt.user.client.Window.onClosed(Window.java:
780)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)         at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)         at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)         at java.lang.reflect.Method.invoke(Method.java:
597)         at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)         at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)         at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)         at
com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:
1713)         at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:
165)         at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:
120)         at
com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
507)         at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:
264)         at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:
91)         at
com.google.gwt.core.client.impl.Impl.apply(Impl.java)         at
com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)         at
sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)         at java.lang.reflect.Method.invoke(Method.java:
597)         at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)         at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)         at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)         at
com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:
1668)         at
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:
401)         at
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:
222)         at java.lang.Thread.run(Thread.java:662)

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to