Обработчики UiHandler платформы GWT не работают

Я следил за GettingStarted в учебнике GWTP.

http://code.google.com/p/gwt-platform/wiki/GettingStarted

но, к сожалению, обработчики не работают, getUiHandlers() возвращает null, а трассировка стека исключений такая же, как в:

Как использовать UiHandlers платформы GWT? .

Просмотреть класс

public class AView extends ViewWithUiHandlers<AUiHandlers> implements APresenter.Display {

    @UiTemplate("AView.ui.xml")
    interface AViewUiBinder extends UiBinder<Widget, AView> {}
    private static AViewUiBinder uiBinder = GWT.create(AViewUiBinder.class);

    @UiField Button saveBtn;
    @UiField Button cancelBtn;

    @UiField DivElement errorDiv;

    private Widget widget;

    @Inject
    public AssetView() {
        widget = uiBinder.createAndBindUi(this);
    }

    public Widget asWidget() {
        return widget;
    }

    // Implementation: Presenter's Display methods
    public void setErrorDivText(String msg) {
        errorDiv.getStyle().setDisplay(Display.BLOCK);
        errorDiv.setInnerText(msg);     
    }

    // Handlers 
    @UiHandler("saveBtn")
    void onSaveButtonClick(ClickEvent event) {
        if(getUiHandlers() != null) {
            getUiHandlers().onSaveButtonClick();
        }
    }

    @UiHandler("cancelBtn")
    void onCancelButtonClick(ClickEvent event) {
        if(getUiHandlers() != null) {
            getUiHandlers().onCancelButtonClick();
        }
    }
}

Интерфейс обработчика

public interface AUiHandlers extends UiHandlers {
    void onSaveButtonClick();
    void onCancelButtonClick();
}

Ведущий

public class APresenter extends Presenter<APresenter.Display, APresenter.AssetProxy> implements AUiHandlers {

    public interface Display extends View, HasUiHandlers<AUiHandlers> { 
        public void setErrorDivText(String msg);
    }

    @ProxyStandard
    @NameToken(NameTokens.ASSET)
    public interface AssetProxy extends ProxyPlace<AssetPresenter> {}

    @Inject
    public AssetPresenter(EventBus eventBus, Display view, AssetProxy proxy) {
        super(eventBus, view, proxy);

        getView().setUiHandlers(this);
    }

    @Override
    protected void onBind() {
        super.onBind();
    }

    @Override
    protected void revealInParent() {
        RevealRootContentEvent.fire( this, this );
    }

    public void onSaveButtonClick() {
        getView().setErrorDivText("Save clicked.");
    }

    public void onCancelButtonClick() {
        getView().setErrorDivText("Cancel clicked.");
    }
}

Не могу понять, где я делаю ошибку, реализация UiHandlers такая же, как указано в вышеупомянутой ссылке учебника.


person Mohammad Suleman Amjad    schedule 29.05.2013    source источник


Ответы (1)


 UiHandlers is not generic; it cannot be parameterized with arguments 

Как я вижу ваш интерфейс обработчика, вы передали тип AUiHandlers. Я не понимаю структуру пакета UiHandlers. это должно быть com.gwtplatform.mvp.client.UiHandlers.

Пожалуйста, проверьте его импорт.

Обновление:

Удалить private static AViewUiBinder uiBinder = GWT.create(AViewUiBinder.class);

и передать как аргумент конструктора

 @Inject
    public AssetView(AViewUiBinder uiBinder) {
        widget = uiBinder.createAndBindUi(this);
    }
person bNd    schedule 29.05.2013
comment
Спасибо, это была просто написанная ошибка в stackoverflow, и импорт такой же, как вы упомянули - person Mohammad Suleman Amjad; 29.05.2013
comment
Хорошо, тогда смотрите обновленный ответ. может быть проблема с инициализацией AViewUiBinder. - person bNd; 29.05.2013
comment
Извините, это не работает. После внесения упомянутых изменений я получаю сообщение об ошибке во время компиляции. Ошибка: 'код'... ... Вызов генератора com.google.gwt.inject.rebind.GinjectorGenerator [ИНФОРМАЦИЯ] [ОШИБКА] Не удается внедрить экземпляр недоступного класса. Key=Key[type=net.prov.ixm.client.view.AView$AViewUiBinder, annotation=[none]] ... ... - person Mohammad Suleman Amjad; 29.05.2013
comment
К вашему сведению, я использую gwtp-all-0.6.jar. а какую версию используете? - person bNd; 30.05.2013
comment
Я использую версию GWTP 0.7. - person Mohammad Suleman Amjad; 30.05.2013