如何使用uiBinder将复合窗口小部件嵌套到主ui.xml文件中?

时间:2011-12-13 22:13:44

标签: gwt widget uibinder

我有一个任务是将复合小部件添加到主ui.xml文件中,但由于某种原因它不起作用。这是我的小部件代码:

public class MyClass extends Composite {
    @UiTemplate("MyClass .ui.xml")
    interface MyClassUiBinder extends UiBinder<Widget, MyClass > {
    }

    private static MyClassUiBinder uiBinder = GWT.create(MyClassUiBinder.class);

    @UiField Label label;

    public MyClass() {
        initWidget(uiBinder.createAndBindUi(this));
    } ...

然后在我的主viewImpl.ui.xml类中: 我声明了类包:

 ... xmlns:u="urn:com... client.view">

然后是小部件本身:

<g:HTMLPanel ui:field="mainPanel" styleName="{style.mainPanel}">
<table align="center">
<tr>
    <td align="center">
        <u:MyClass/>
    </td>
</tr>

我也尝试在viewImpl类中设置一个ui:field声明,但是我在编译时抛出了一个错误:

错误]在@UiField myClass中,模板字段和所有者字段类型不匹配:com.google.gwt.dom.client.Element不能分配给com ... client.view.MyClass

当我从viewImpl和它编译的ui.xml中取出@UiField声明时,但是当页面加载时窗口小部件没有显示。

我创建了另一个复合窗口小部件类,并尝试仅使用按钮窗口小部件复制它。

使用firebug我看到该元素已添加到主ui.xml页面,但它也没有显示,所以我的绑定在某种程度上并不完全。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

我发现了问题,GWT告诉我,我没有正确地做我的声明,但错误并不像我希望的那样具有描述性。

在我使用的main.ui.xml文件中:

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
 xmlns:g="urn:import:com.google.gwt.user.client.ui"
 xmlns:u="urn:com.abc.client.view">

但是,最后一行应该包含 import 这个词:

xmlns:u="urn:import.com.abc.client.view">

这是我找到answer

的地方

我希望这对某人有所帮助,这花了我很多时间!

答案 1 :(得分:1)

您没有在插入MyClass窗口小部件的位置显示更多UI关键帧标记,但如果您的窗口小部件位于某个原始HTML中,则需要在HTMLPanel中包含所有这些HTML。