如何在GWT HTMLPanel下包装元素

如何在GWT HTMLPanel下包装元素,gwt,Gwt,假设我用一些HTML创建了一个HTMLPanel,比如: <p> Blah blah <span id='1'>more html... </span> </p> 倒数第二行与AssertionError一起消失:具有现有父窗口小部件的窗口小部件可能不会添加到分离列表中 有没有办法在HTMLPanel中包装子元素 这是GWT2.4 注意 在做了一些评论和回答之后,我意识到我忘了提到:通常这里的答案是UiBinder,但我不使用它,因为输入是

假设我用一些HTML创建了一个
HTMLPanel
,比如:

<p>
   Blah blah <span id='1'>more html... </span>
</p>
倒数第二行与AssertionError一起消失:具有现有父窗口小部件的窗口小部件可能不会添加到分离列表中

有没有办法在
HTMLPanel
中包装子元素

这是GWT2.4

注意


在做了一些评论和回答之后,我意识到我忘了提到:通常这里的答案是
UiBinder
,但我不使用它,因为输入是非程序员在另一个上下文中创建的html文本

不,不是真的。之所以会出现此异常,是因为
元素已经是某个小部件的一部分
wrap
方法只能用于在不属于其他小部件的元素之上创建小部件。如果要处理此范围上的单击,可以将dom处理程序添加到
HTMLPanel
,然后检测单击了哪个元素。

将您的
转换为UiBinder模板中的一个元素,并向其附加任何您想要的内容:)。

UiBinder是您的朋友。是的,通常是这样。但在本例中不是这样,因为我正在解析来自用户的html/wiki文本。它面向高级用户,但不面向程序员,uibinder语法过于冗长和低级。(我没有检查,但在运行时可能也不可用。)是的,这通常是最好的方法。我应该在我的问题中说明为什么我没有使用UiBinder。我会在问题上加上这个。好的,谢谢。由于没有简单的方法,只需一个方法调用,我就可以解析HTML并将我想要制作的部分提取到子小部件中。我在
HTMLPanel
中留下一个
,然后调用
addAndReplaceElement(widget,uniqueId)
HTMLPanel html = new HTMLPanel(stringOfHTML);
parentWidget.add(html);
String id = "1";
Element span = html.getElementById(id);
InlineHTML wid = InlineHTML.wrap(span);  // -- error here
html.addAndReplaceElement(wid, id);