HTMLPanel可以在uiBinder中使用,即使它没有no-args构造函数。怎么会?

时间:2016-05-19 13:17:23

标签: java gwt uibinder

http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html

它声明要在uiBinder模板中使用小部件:

  

它们必须是默认的可实例化的;也就是说,它们必须提供零参数构造函数。但是,有几种方法可以解决这个问题。除了共享资源实例下描述的@UiFactory@UiField(provided = true)机制之外,您还可以使用@UiConstructor注释标记自己的小部件。

HTMLPanel不会满足这些要求,但可以在UiBinder模板中使用。怎么样?

1 个答案:

答案 0 :(得分:1)

GWT中的一些内置小部件在UiBinder中具有自定义支持,以便他们可以完成工作。对于这些情况,特殊处理属性或元素(考虑<ui:with><ui:field>,当然还有<g:HTMLPanel>等),以便使用uibinder。

HTMLPanel是一种特殊情况,它不能通过实现HasHtmlHasWidgets来存在,因为这些子窗口小部件需要在html结构内的某个点附加。因此,他们不是使用公共API(正如您在文档中找到的那样),而是作弊了。

最终结果是您无法在自己的代码中复制而无需实际分支uibinder并直接编辑它。这已经在其他项目中完成,但是当后来对UiBinder进行更改时会出现破坏的高风险,因此通常应该避免。

TL; DR:将HTMLPanel视为一种特殊情况,可以稍微弯曲规则以使其更有用。在您自己的代码中,尝试坚持使用UiFactory / UiConstructor / UiChild注释,属性设置器,以及为子内容实现一个受支持的接口。