【问题标题】:GWT Platform UiHandlers not workingGWT 平台 UiHandlers 不工作
【发布时间】:2013-05-29 17:12:39
【问题描述】:

我已按照 GWTP 教程上的 GettingStarted 进行操作

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

但不幸的是,处理程序不起作用,getUiHandlers() 返回 null 并且异常堆栈跟踪与以下内容相同:

How to use UiHandlers of GWT Platform? .

查看类

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 的实现与上述教程链接中的说明相同。

【问题讨论】:

    标签: gwt gwtp


    【解决方案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);
        }
    

    【讨论】:

    • 谢谢,只是stackoverflow里写错了,导入和你说的一样
    • 好的,然后查看更新的答案。可能是 AViewUiBinder 初始化的问题。
    • 对不起,它不起作用。进行上述更改后,我在编译时遇到错误。错误是:'code'... ... 调用生成器 com.google.gwt.inject.rebind.GinjectorGenerator [INFO] [ERROR] 无法注入不可访问类的实例。 Key=Key[type=net.prov.ixm.client.view.AView$AViewUiBinder, annotation=[none]] ... ...
    • 仅供参考,我正在使用 gwtp-all-0.6.jar。你用的是什么版本?
    • 我使用的 GWTP 版本是 0.7。
    猜你喜欢
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多