我正在使用GWT 2.5作为应用程序。我有一些静态HTML和一个特别命名的div,我使用HTMLPanel.wrap()
用GWT登录面板替换该div。一旦用户登录,我使用DOM.removeChild()
从页面中删除所有静态元素,只使用GWT小部件。一切都很好。静态HTML看起来像:
<body><div id="main_content"><div id="embed_content"></div></div></body>
然而,在注销后,我想替换我之前删除的所有静态元素,并再次使用登录面板替换特殊div,使其看起来与您第一次登录时相同。我尝试了很多不同的如何做到这一点,但他们通常会失败并出现错误:
“具有现有父窗口小部件的窗口小部件可能无法添加到分离列表”
当我尝试再次包装div时。包装div的代码是:
RootPanel rpe = RootPanel.get("embed_content");
rpe.clear();
Element child;
while((child = DOM.getFirstChild(rpe.getElement())) != null) {
DOM.removeChild(rpe.getElement(), child);
}
HTMLPanel.wrap(rpe.getElement()).add(this);
“this”是一个HTMLPanel。删除元素的代码是:
RootPanel rpm = RootPanel.get("main_content");
rpm.clear();
Element child;
while((child = DOM.getFirstChild(rpm.getElement())) != null) {
DOM.removeChild(rpm.getElement(), child);
}
HTMLPanel.wrap(rpm.getElement()).add(this);
我最接近的是将元素保存在数组中,然后当我想再次显示静态内容时,我使用DOM.appendChild()
将它们添加回去。此时,“embed_content”元素存在,除了我在HTMLPanel.wrap
语句中得到上述错误之外,一切都很愉快。所以我不知道我是否使用了错误的方法,或者是什么。任何建议都将不胜感激。
答案 0 :(得分:0)
Element child;
RootPanel rpm = RootPanel.get("main_content");
String html = rpm.getElement().getInnerHTML();
rpm.clear();
while((child = DOM.getFirstChild(rpm.getElement())) != null) {
DOM.removeChild(rpm.getElement(), child);
}
HTMLPanel panel = new HTMLPanel(html);
String msg = "<h2>Please Wait</h2><p>Please wait a moment for " +
"the application to load.</p>";
panel.addAndReplaceElement(new HTML(msg), "embed_content");
this.add(panel);
this.setWidth("100%");
RootLayoutPanel.get().add(new ScrollPanel(this));
因此在其他情况下,我需要读取服务器上的文件,并通过RPC发送HTML。