繁体   English   中英

GWT导出器从GWT.create强制转换为异常; 尝试将mvp4g与GWT-Exporter一起使用,但GWT.create无法正常工作

[英]GWT exporter cast exception from GWT.create; Tried to use mvp4g with GWT-Exporter but GWT.create didn't work

我尝试使用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。 这就解释了类强制转换异常。 那么我该如何解决呢?

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

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

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

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

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

然后,我必须创建MyPresenterProvider类:

public static class MyPresenterProvider.class implements Provider<MyPresenter> {
      @Override
    public MyPresenter get() {
        return new MyPresenter();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM