我是Java和GWT的新手。
据我所知,GWT的概念不是在页面之间导航
而是使用相同的RootPanel
并更改其中的内容。
我的问题是,如果我向RootPanel
添加了一些小部件并将它们与浏览器元素相关联,该怎么做。
例如:
RootPanel.get("sendButtonContainer").add(sendButton);
RootPanel.get().clear();
在此代码之后,sendbutton
仍会显示RootPanel
。
帮助将不胜感激。
答案 0 :(得分:4)
上面的一些答案已经解决了你的问题,但我想你首先遇到问题的原因是因为你把GWT Widgets与HTML Elements混淆了。如果你做得不对,这可能会让你头痛不已。
问题的关键在于您的网站将始终由HTML元素组成,您可以通过修改主.html页面,创建GWT小部件并将其添加到其他小部件或面板来编辑,手动编写现有元素的innerHTML CSS等也将按预期应用于这些元素。
那么GWT小部件怎么样?好吧,它们基本上是包装底层元素的代码单元,无论是创建它还是包装现有元素。这些包装器在比普通元素更高的层次上工作,让我们说在逻辑层面上。因此,它们具有自己的逻辑层次结构,这可能与HTML层次结构不同。
例如,假设您将一个Label添加到HorizontalPanel。从逻辑上讲,标签是面板的子项,如果您调用clear,它将被删除。现在,如果你深入研究DOM结构,你会发现一个<表>元素(由面板包裹),其具有< tr>元素,其又具有< td>元素,其又具有< div>元素(由标签包裹),后者又包含标签文本。看看层次结构有何不同?
所以,回到你的实际问题:RootPanel.get()。clear();将删除GWT窗口小部件层次结构中的任何逻辑子项,在您的情况下没有任何内容,因为您将按钮添加到其他面板(“sendButtonContainer”)。事实上,在HTML层次结构中,sendButtonContainer可能是主RootPanel的子元素,这是无关紧要和独立的。你当然可以通过执行RootPanel.get()。getElement()。setInnerHTML(“”);它在dom级别工作。您的小部件甚至可能仍然存在且可访问,它们不会出现在文档中。
答案 1 :(得分:2)
这里的问题是RootPanel.get()。clear()只能删除通过GWT添加到它的小部件。您的“sendButtonContainer”未通过GWT添加 - 它是从html页面添加的。 sendButton
也未添加到根面板中,因此也不会将其删除。
如果您只想删除发送按钮,可以拨打RootPanel.get("sendButtonContainer").clear()
如果要实际清除整个根面板(包括sendButtonContainer),则必须将sendButtonContainer(以及其他所有内容)显式添加到RootPanel作为窗口小部件。有些方法可用于使用小部件在html主页上包装元素。
如果可能的话,如果您完全从GWT内部构建整个页面,并且将主机html页面保留为空白,则会更加容易。 UiBinder使得继续使用HTML变得相对简单,但是在GWT的框架内。
答案 2 :(得分:1)
您应该尝试清洁附加小部件的容器:
RootPanel.get("sendButtonContainer").clear()
答案 3 :(得分:1)
尝试这种方式:
RootPanel rootPanel = RootPanel.get();
rootPanel.get().add("yourButton");
rootPanel.clear();
答案 4 :(得分:1)
我知道这个问题相当陈旧,但也许这就是你要找的答案:
RootPanel.get("sendButtonContainer").clear();
RootPanel.get().clear();
RootPanel.get().getElement().setInnerHTML(""); // <-- This is the key!
这将删除根面板中的所有内容,或者您可能在get()
函数中通过id指定的任何其他div:
在您要清除的内容中,您必须首先在已添加小部件的任何其他RootPanel上调用GWT clear()
。否则,这些小部件将在下一步中成为孤立的,您将遇到异常。
第三行然后从RootPanel中删除任何 HTML。这包括您的GWT应用程序所基于的网页中包含的任何HTML,以及GWT添加的任何HTML,现在不应该留下任何HTML,如果您正确执行了第一步,否则,您将遇到提到的问题。
希望这有帮助。
BTW:使用GWT的好选择! ;)
答案 5 :(得分:1)
RootPanel.get("id_of_element_already_in_html").getElement().removeFromParent();