No it's not. You aren't using it correctly.
Panel actionsarea = RootPanel.get("actionpanel");
ActionsView actions = new ActionsView();
actions.setMainPanel(actionsarea);
I'm going to go out on a limb here & say it's the third line where the
exception gets thrown. Here's what I think you are doing (not really sure
what ActionsView is doing, so this is conjecture):
RootPanel.get() - wrapping an HTML component in a GWT widget
actions.setMainPanel(actionsarea); - putting something that is a GWT widget
that is wrapping an HTML component into another GWT widget. This is not
allowed (as per the diagram I gave previously).
The "actionpanel" div already has an HTML parent element (the div with id
"applicationarea"). You cannot add this to another GWT widget.
On Thu, May 7, 2009 at 2:25 PM, marco <[email protected]> wrote:
>
> This happens also for perfectly 'legal' HTML:
>
> <div id="staticarea" />
> <div id="applicationarea">
> <div id="menuarea" />
> <div id="clientarea" />
> <div id="actionpanel" />
> </div>
>
> (the reason for doing so is that by using CSS I can easily position
> the four areas in the client area - see attached)
> Here's the code that generates the AssertionError:
>
> public void onModuleLoad() {
> Container.getInstance().registerController(this);
>
>
> Panel clientarea = RootPanel.get("clientarea");
> Label holding = new Label();
> holding.setText("work in progress...");
> clientarea.add(holding);
>
> Panel menuarea = RootPanel.get("menuarea");
> MenuView menuView = new MenuView(menuarea);
> registerView(ViewType.MENU, menuView);
> menuView.render();
>
> // This causes the exception to be raised:
> Panel actionsarea = RootPanel.get("actionpanel");
> ActionsView actions = new ActionsView();
> actions.setMainPanel(actionsarea);
> registerView(ViewType.ACTION, actions);
> actions.render();
> }
>
> IMHO this is a genuine GWT bug....
>
> On Apr 28, 8:40 pm, Vitali Lovich <[email protected]> wrote:
> > Yes. Use GWT properly. Don't use raw HTML. That's your problem.
> >
> > Instead of adding an HTML widget that wraps a "<div>", use a SimplePanel
> &
> > set it's id if you need to. Look at the showcase - it shows you a brief
> > overview of most (all?) the widgets GWT has.
> >
> > Think of using raw HTML in your app as something akin to JSNI - only do
> it
> > if you know what you are doing, otherwise you're just going to shoot
> > yourself in the foot. The only time raw HTML is "commonly" used is in
> the
> > constructor of some Widgets (you'll see a boolean asking if you want to
> > treat the string as text or html).
> >
> > The rule of thumb to use is as follows:
> >
> > HTML element
> > |
> > v
> > wrapping GWT root panel
> > |
> > v
> > GWT widgets & panels
> > |
> > v
> > HTML possible
> >
> > Do not put GWT widgets below HTML possible. Do not wrap HTML possible in
> > GWT widgets. HTML element can have sibling elements that get wrapped
> with
> > GWT.
> >
> > Hopefully this'll clarify it for you.
> >
> > On Tue, Apr 28, 2009 at 4:52 AM, kohlyn <[email protected]> wrote:
> >
> > > Any suggested workarounds?
> >
> > > I currently load a page layout in HTML (Header/Menu Bar/Footer) ...
> > > then in each section I load different HTML layouts depending on the
> > > user, and then I add the controls.
> >
> > > On Apr 27, 6:15 pm, Vitali Lovich <[email protected]> wrote:
> > > > Yes this has already come up on the mailing list. This was always
> > > illegal,
> > > > just uncaught prior to 1.6. You cannot wrap two elements in GWT if
> they
> > > > already have a parent/child relationship in the DOM (causes a
> mismatch in
> > > > the trees).
> >
> > > > Do a search & you'll find the response from the GWT developer
> regarding
> > > this
> > > > issue.
> >
> > > > On Mon, Apr 27, 2009 at 11:12 AM, kohlyn <[email protected]> wrote:
> >
> > > > > I'm getting the following errors with 1.6.4 on a Mac.
> >
> > > > > "A widget that has an existing parent widget may not be added to
> the
> > > > > detach list"
> >
> > > > > The HTML is:
> >
> > > > > <body>
> > > > > <!-- OPTIONAL: include this if you want history support -->
> > > > > <iframe src="javascript:''" id="__gwt_historyFrame"
> tabIndex='-1'
> > > > > style="position:absolute;width:0;height:0;border:0"></iframe>
> > > > > <h1>Web Application Starter Project</h1>
> > > > > <div id="testdiv"></div>
> > > > > </body>
> >
> > > > > Code:
> >
> > > > > public void onModuleLoad() {
> >
> > > > > HTMLPanel p = new HTMLPanel("<div
> id=\"testdiv2\">Test
> > > Div
> > > > > 2</
> > > > > div>");
> >
> > > > > RootPanel.get("testdiv").add(p);
> >
> > > > > final TextBox txtUsername = new TextBox();
> >
> > > > > RootPanel.get("testdiv2").add(txtUsername);
> >
> > > > > }
> > > > > }
> >
> > > > > This code worked in the 1.4 and 1.5 branches, but not 1.6.
> >
> > > > > The line:
> >
> > > > > "RootPanel.get("testdiv2").add(txtUsername);"
> >
> > > > > throws the exception.
> > > > > "A widget that has an existing parent widget may not be added to
> > > > > the detach list"
> >
> > > > > The problems appears to be with a new check in
> > > > > RootPanel.detachOnWindowClose(Widget widget)
> >
> > > > > assert !isElementChildOfWidget(widget.getElement()) : "A widget
> > > > > that has "
> > > > > + "an existing parent widget may not be added to the detach
> > > > > list";
> >
> > > > > RootPanel.isElementChildOfWidget(Element element) appears to fail
> > > > > because I'm adding a widget to an already attached element.
> >
> > > > > Any work arounds/ideas would be greatly appreciated ... I have a
> 1.4
> > > > > application that is based on dynamically loading page layouts from
> a
> > > > > database.
> >
> > > > > Thanks.
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---