Search code examples
gwtsmartgwt

SmartGWT tab losing GWT based contents


I have written very basic GWT application where SmartGWt tabs render with label on both tabs.

Problem I am facing here is, when I put GWT based label in second tab and reload application, first tab renders SmartGWT based label but when i click on second tab to look GWT label, it doesn't appear and also I am surprised why first tab content is removed as It was appearing earlier before clicking on second tab.

Please have a look into below code.

package com.test.client;

import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;

public class TestGWT implements EntryPoint
{
 public void onModuleLoad()
 {
  TabSet tabSet = new TabSet();
  tabSet.setWidth("400px");

  Tab tab1 = new Tab("Tab1");
  Canvas pane = new Canvas();
  pane.addChild(new com.smartgwt.client.widgets.Label("test label"));
  tab1.setPane(pane);

  Tab tab2 = new Tab("Tab2");
  Canvas pane2 = new Canvas();
  pane2.addChild(new Label("test label2")); // I need to put GWT widget in SmartGWT tab but it does not render in this tab. Also, it removes contents from first tab
  tab2.setPane(pane2);

  tabSet.addTab(tab1);
  tabSet.addTab(tab2);

  RootPanel.get("testid").add(tabSet);
 }
}

When I set second SmartGWT tab to appear first which has GWT widget then things are working fine.

I am using GWT-2.6.1

Please share your thoughts here!

Regards, Shobhit


Solution

  • The problem is adding the TabSet to the RootPanel. So you receive an

    A widget that has an existing parent widget may not be added to the detach list.

    error.

    Change RootPanel.get("testid").add(tabSet); to

    tabSet.setHtmlElement((Element) Document.get().getElementById("testid"));
    tabSet.draw();
    

    and it will work fine.