GWT UiConstructor с аргументами, у класса нет подходящего метода установки - PullRequest
1 голос
/ 07 марта 2011

Я хотел бы реализовать пользовательский TabLayoutPanel, который автоматически настраивал бы саму вкладку при добавлении виджета (с настраиваемыми действиями, такими как закрытие вкладки и т. Д.).

Я создал CustomTabPanel.ui.xml вместе с CustomTabPanel.java. Дизайн пользовательского интерфейса просто встраивает TabLayoutPanel, а часть кода предоставляет некоторые функции, которые мне нужны. У меня также есть конструктор, который принимает те же 2 аргумента, что и TabLayoutPanel, которые я хотел бы передать в режиме дизайна пользовательского интерфейса, так же, как и с простым TabLayoutPanel. Похоже, это

public class CustomTabPanel extends Composite{
    /* ... here all the uiBinder things
       already written by my eclipse plugin */

    @UiField(provided=true)
    TabLayoutPanel tabPanel;

    public @UiConstructor CustomTabPanel(double barHeight, Unit barUnit){
        tabPanel = new TabLayoutPanl(barHeight, barUnit);
        initWidget(uiBinder.creatAndBindUi(this));
    }

Я использую пользовательский составной виджет в другом .ui.xml файле Но затем, когда я запускаю и тестирую веб-приложение в своем браузере, я получаю следующую ошибку:

Класс CustomTabPanel не имеет подходящего метода setBarUnit (). Элемент

Я следовал инструкциям, прочитанным на http://code.google.com/intl/fr/webtoolkit/doc/latest/DevGuideUiBinder.html#Using_a_widget, чтобы сделать это. Я думаю, что что-то упустил, но не могу понять, что это такое.

Также я пытался использовать наследование, создав производное class ExtendedTabLayoutPanel extends TabLayoutPanel{...} и реализовав конструктор с аргументами. Это дает мне во время выполнения еще одну ошибку:

Строка xx: несоответствие типов: невозможно преобразовать TabLayoutPanel в ExtendedTabLayoutPanel

Надеюсь, я достаточно ясно ... Скоро прочитаю!

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

У меня была такая же проблема.Оказывается, порядок аргументов важен как-то;см. http://code.google.com/p/google-web-toolkit/issues/detail?id=5272

Если у вас есть правильный порядок, вам не нужно беспокоиться о преобразовании перечисления.Теперь у меня есть это:

public @UiConstructor FancyTabLayoutPanel(Unit barUnit, double barHeight) {...}

... и в моем файле .ui.xml:

<v:FancyTabLayoutPanel barUnit="EM" barHeight="2.0"></v:FancyTabLayoutPanel>

Интересно, является ли требуемый порядок аргументов надежным в разных развертываниях?

0 голосов
/ 07 марта 2011

Ваша проблема может быть связана с тем, что com.google.gwt.dom.client.Style.Unit является перечислением.Альтернативный подход, который должен решить проблему, состоит в том, чтобы изменить barUnit на тип string и затем использовать Unit.valueOf (barUnit), чтобы получить соответствующее значение перечисления.Это также дает вам возможность правильно проверять ошибки переданного имени устройства.

Что касается проблемы с наследованием в UiBinder, то это на самом деле известная проблема , которая была исправлена, но небыл официально добавлен в GWT.

...