SmartGWT选项卡丢失基于GWT的内容

SmartGWT选项卡丢失基于GWT的内容,gwt,smartgwt,Gwt,Smartgwt,我已经编写了非常基本的GWT应用程序,其中SmartGWt选项卡在两个选项卡上都显示标签 我在这里面临的问题是,当我将基于GWT的标签放入第二个选项卡并重新加载应用程序时,第一个选项卡呈现基于SmartGWT的标签,但当我单击第二个选项卡查看GWT标签时,它并没有出现,而且我很惊讶为什么第一个选项卡内容会被删除,因为它在单击第二个选项卡之前出现过 请查看下面的代码 package com.test.client; import com.smartgwt.client.widgets.Canva

我已经编写了非常基本的GWT应用程序,其中SmartGWt选项卡在两个选项卡上都显示标签

我在这里面临的问题是,当我将基于GWT的标签放入第二个选项卡并重新加载应用程序时,第一个选项卡呈现基于SmartGWT的标签,但当我单击第二个选项卡查看GWT标签时,它并没有出现,而且我很惊讶为什么第一个选项卡内容会被删除,因为它在单击第二个选项卡之前出现过

请查看下面的代码

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);
 }
}
当我将第二个SmartGWT选项卡设置为第一个出现时,它有GWT小部件,然后一切正常

我正在使用GWT-2.6.1

请在这里分享你的想法

问候,,
Shobhit

问题是将选项卡集添加到根面板。所以你收到了

具有现有父窗口小部件的窗口小部件不能添加到分离列表中

错误

更改
RootPanel.get(“testid”).add(tabSet)

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

它会很好地工作。

问题是将选项卡集添加到根面板。所以你收到了

具有现有父窗口小部件的窗口小部件不能添加到分离列表中

错误

更改
RootPanel.get(“testid”).add(tabSet)

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

它会很好地工作。

虽然我同意问题的原因是
RootPanel.get(“testid”).add(tabSet)
,但解决方案是将该行替换为:

tabSet.show();
请记住,在SmartGWT中,应该使用
add()
将组件添加到其他组件中。尝试使用组件ID添加组件容易出错


最后,请记住,同构不鼓励将SmartGWT的组件与其他库中的组件混合使用。虽然有时这是不可避免的,但如果您可以在应用程序中避免它,您应该这样做,因为这是一个非常常见的bug源。有关这些索赔的其他来源,请参见下面我的评论

虽然我同意问题的原因是
RootPanel.get(“testid”).add(tabSet)
,但解决方案是将该行替换为:

tabSet.show();
请记住,在SmartGWT中,应该使用
add()
将组件添加到其他组件中。尝试使用组件ID添加组件容易出错


最后,请记住,同构不鼓励将SmartGWT的组件与其他库中的组件混合使用。虽然有时这是不可避免的,但如果您可以在应用程序中避免它,您应该这样做,因为这是一个非常常见的bug源。有关这些索赔的其他来源,请参见下面我的评论

您使用的是哪个SmartGWT版本?我的答案是用SmartGWT 2.4和5.0p测试的-两个版本都可以正常工作。您使用的是哪个SmartGWT版本?我的答案是用SmartGWT 2.4和5.0p测试的-两个版本都可以正常工作。很抱歉不同意,但这会将选项卡集添加到根面板而不是
\testid
-Div,因此,结构会有所不同,结果可能会发生很大变化。只有当选项卡集不应添加到某个div时,您的答案才是正确的。:-)请参阅差异(缺少图像,因此忽略此-这与位置有关)@mxlse我确实在OP的代码中尝试了我的解决方案,它工作正常。你假设OP没有提到的东西,并基于此进行向下投票。我从OP那里获取了代码,在这个示例中,他将其添加到id为“testid”的某个元素中。@mxlse问题是,这个id为“testid”的元素是OP正在(不正确地)尝试使代码在SmartGWT中工作的东西。这是一种基于GWT的方法,而不是SmartGWT方法(这就是代码不起作用的原因)!在SmartGWT中,以您的方式添加组件是一种方法(请阅读第二段),因为它可能会搞乱许多不同的事情。很抱歉不同意,但这会将选项卡集添加到根面板,而不是
#testid
-Div,因此结构会有所不同,结果可能会发生很大变化。只有当选项卡集不应添加到某个div时,您的答案才是正确的。:-)请参阅差异(缺少图像,因此忽略此-这与位置有关)@mxlse我确实在OP的代码中尝试了我的解决方案,它工作正常。你假设OP没有提到的东西,并基于此进行向下投票。我从OP那里获取了代码,在这个示例中,他将其添加到id为“testid”的某个元素中。@mxlse问题是,这个id为“testid”的元素是OP正在(不正确地)尝试使代码在SmartGWT中工作的东西。这是一种基于GWT的方法,而不是SmartGWT方法(这就是代码不起作用的原因)!在SmartGWT中,以您正在进行的方式添加组件是一种方法(请阅读第二段),因为它可能会搞乱许多不同的事情。