Как вложить составной виджет в основной файл ui.xml, используя uiBinder? - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть задача добавить составной виджет в основной файл 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>

Я также попытался настроить объявление ui: field в классе viewImpl, но я получил ошибку во время компиляции:

ОШИБКА] В @UiField myClass типы полей шаблона и поля владельца не совпадают: com.google.gwt.dom.client.Element нельзя назначить com ... client.view.MyClass

Когда я взял объявление @UiField из viewImpl и скомпилировал ui.xml, но виджет не отображался при загрузке страницы.

Я создал другой класс составного виджета и попытался продублировать его с помощью всего лишь виджета кнопки.

Используя firebug, я вижу, что элемент был добавлен на главную страницу ui.xml, но он также не отображается, поэтому мое связывание не совсем завершено.

Что мне здесь не хватает?

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

Я обнаружил проблему, 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">

Здесь я нашел ответ .

Надеюсь, это кому-нибудь поможет, это стоило мне много времени!

1 голос
/ 14 декабря 2011

Вы не показывали больше разметки подшивки пользовательского интерфейса вокруг места, где вы вставляете виджет MyClass, но если у вас есть виджет внутри некоторого необработанного HTML, вам нужно иметь весь этот HTML в HTMLPanel.

...