0

我尝试使用 GWT-Exporter,当我复制示例时它工作得很好。然后我尝试导出一个 mvp4g Presenter 这是我所做的:

@Export()
@Presenter(view = RegisterPluginDisplay.class)
public class RegisterPluginPresenterImpl extends BasePresenter<RegisterPluginView, MyBus implements RootPresenter { ... }

public interface RegisterPluginPresenter extends Exportable { ... }

//then in the start event I said:
ExporterUtil.exportAll();

它给了我这个错误:

Uncaught java.lang.AssertionErrorcom_mvp4g_client_Mvp4gModuleImpl_com_mvp4g_client_Mvp4gModuleGinjector_com_mvp4g_client_Mvp4gModule…:62 get_Key$type$com$joseph$draw4$client$presenter$RegisterPluginPresenterImpl$_annotation$$none$$_0_g$com_mvp4g_client_Mvp4gModuleImpl_com_mvp4g_client_Mvp4gModuleGinjectorImpl.java:34 getcom_joseph_draw4_client_presenter_RegisterPluginPresenterImpl_0_g$Mvp4gModuleImpl.java:101 createAndStartModule_0_g$Mvp4gEntryPoint.java:35 onModuleLoad_5_g$com_00046joseph_00046draw4_00046Draw4JUnit__EntryMethodHolder.java:3 init_2_g$ModuleUtils.java:44 initializeModules_0_g$Impl.java:247 apply_0_g$Impl.java:306 entry0_0_g$Impl.java:72 (anonymous function)ModuleUtils.java:55 gwtOnLoad_0_g$Map.java:29 (anonymous function)

我查看了代码,发现 GWT.create() 未能成功创建演示者。我尝试创建一个导出类,然后在其上使用 GWT.create,发现即使我不执行 ExporterUtils.exportAll(),我也无法将 GWT.create 与任何实现 Exportable 的类一起使用。Exportable 接口的文档说 GWT.create() 语句返回一个 Exportable。这解释了类转换异常。那么我该如何解决呢?

4

2 回答 2

0

我切换到使用实验性 js 互操作,但仍然遇到同样的问题。Mvp4g 使用 gin 来获取 Presenter。根据gin wiki “如果 GIN 找不到类的绑定,它会回退到在该类上调用 GWT.create() ”以实例化它。它不能在 Exportable 上使用 GWT.create,因为 GWT.create(an Exportable) 返回一个 Exporter。就像文档说的那样,您必须绑定该类才能使其不使用 GWT.create。解决方案是为类添加绑定。我只需要进入我的 GinModule 的配置方法并添加这行代码:

bind(MyPresenter.class).toProvider(MyPresenterProvider.class);

然后我必须创建 MyPresenterProvider 类:

public static class MyPresenterProvider.class implements Provider<MyPresenter> {
      @Override
    public MyPresenter get() {
        return new MyPresenter();
    }
于 2015-02-09T00:22:03.160 回答
0

mvp4g 使用 GIN 创建演示者实例。GIN 用于GWT.create(YourPresenter.class)创建类的实例。

只要您没有任何与 YourPresenter 类相关的延迟绑定规则,GWT.create 的行为就会像 Java 中的新规则一样。

如果您使用 Exporter 界面标记任何内容,则会触发 GWT Exporter Generator。生成器创建不能与 mvp4g 一起使用的导出器实现。

于 2015-01-31T11:46:00.573 回答