我尝试使用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(),我也不能在实现Exportable的任何类中使用GWT.create。 Exportable接口的文档说GWT.create()语句返回一个Exportable。这解释了类强制转换异常。那么我该如何解决这个问题?
答案 0 :(得分:0)
mvp4g使用GIN创建演示者的实例。 GIN使用GWT.create(YourPresenter.class)
来创建类的实例。
只要您没有与YourPresenter类相关的任何延迟绑定规则,GWT.create就会像Java中的新行为一样。
如果您使用Exporter接口标记任何内容,将触发GWT Exporter Generator。生成器创建导出器实现,不能与mvp4g一起使用。
答案 1 :(得分:0)
我转而使用实验性的js互操作,但仍然遇到了同样的问题。 Mvp4g使用杜松子酒来获取演示者。根据{{3}} &#34;如果GIN找不到类的绑定,它会回退到在该类上调用GWT.create()&#34;为了实例化它。它无法在Exportable上使用GWT.create,因为GWT.create(可导出)返回导出器。就像文档说的那样,你必须将类绑定为不使用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();
}