连接gwt调度与guice和mvp4g

连接gwt调度与guice和mvp4g,gwt,inversion-of-control,gwt-gin,gwt-dispatch,gwt-mvp,Gwt,Inversion Of Control,Gwt Gin,Gwt Dispatch,Gwt Mvp,我有一些关于gwt调度和GUI的问题。我使用的是Guice 2.0、gwt dispatch 1.1.0 snapshot、mvp4g 1.1.0和GIN 1.0 首先,我定义了简单操作、结果和处理程序: ListContactsAction.java public class ListContactsAction implements Action<ListContactsResult>{ public ListContactsAction() { } } 我

我有一些关于gwt调度和GUI的问题。我使用的是Guice 2.0、gwt dispatch 1.1.0 snapshot、mvp4g 1.1.0和GIN 1.0

首先,我定义了简单操作、结果和处理程序:

ListContactsAction.java

public class ListContactsAction implements Action<ListContactsResult>{

    public ListContactsAction() {
    }

}
我在gwt dispatch getting started上读到,我必须在我的操作和它的处理程序之间提供绑定,看起来应该是这样的:

public class ContactModule extends ActionHandlerModule{
    @Override
    protected void configureHandlers() {
        bindHandler(ListContactsAction.class, ListContactsHandler.class);
    }
}
但我在使用Guice连接所有这些方面都有问题,因为gwt调度站点的这个示例:

public class DispatchServletModule extends ServletModule {
    @Override
    public void configureServlets() {
        serve( "/path/to/dispatch" ).with( DispatchServiceServlet.class );
    }
}
不工作,因为包中没有
DispatchServiceServlet

我的问题是:

  • 我应该如何编写DispatchServletModule以及如何使其运行(使用我应该提供的路径)
  • 我应该在我的应用程序的web.xml文件中放入什么才能正确执行演示者的操作,演示者已经执行了
    DispatcherAsync
    实现
  • 我应该把我的
    SqlSessionFactory
    提供方法(在哪个模块中)放在哪里,以便能够将SqlSessionFactory注入我需要的地方
  • 如何实例化注入器,以便在其他操作处理程序中正确使用它

我想就这些,我说得很清楚。如果有些地方不够清楚,我会尽量说得更具体。

您创建了GuiceServletConfig类吗?在这里,您可以使用Guice设置Dispatch servlet模块以及操作处理程序模块

plubic class GuiceServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new HandlerModule(), new DispatchServletModule());
    }
}
HandlerModule是ActionHandler模块类,因此您可以从代码中放入ContactModule类

public class MyClientModule extends AbstractGinModule {
  @Override protected void configure() {
    bind(...).to(...);
    ...
  }
}

对于SqlSessionFactory,您可以在ContactModule中为其设置绑定,使用我的代码,我只有一个ServerModule来设置所有服务和操作处理程序绑定。这主要是为了简单。

您是否创建了GuiceServletConfig类?在这里,您可以使用Guice设置Dispatch servlet模块以及操作处理程序模块

plubic class GuiceServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new HandlerModule(), new DispatchServletModule());
    }
}
HandlerModule是ActionHandler模块类,因此您可以从代码中放入ContactModule类

public class MyClientModule extends AbstractGinModule {
  @Override protected void configure() {
    bind(...).to(...);
    ...
  }
}

对于SqlSessionFactory,您可以在ContactModule中为其设置绑定,使用我的代码,我只有一个ServerModule来设置所有服务和操作处理程序绑定。这主要是为了简单。GWT平台框架使用GWT调度叉来处理rpc请求。如果您认真考虑使用dispatcher和Guice,可能需要自己编写很多代码。我强烈推荐它。

GWT平台框架使用GWT调度叉来处理rpc请求。如果您认真考虑使用dispatcher和Guice,可能需要自己编写很多代码。我强烈推荐。

首先,我表示同情。把这一切放在一起,在任何一个地方都没有记录。我会依次回答你的每个问题。如果有任何不清楚的地方,请在我的回答中添加评论

QU:我应该如何编写DispatchServletModule以及如何使其运行(使用我应该提供的路径)

net.customware.gwt.dispatch.server.guice包中有一个GuiceStandardDispatchServlet类;用那个。我不能百分之百确定原因,但我使用的路径包括我的GWT模块的名称,后跟“/dispatch”。你可能得试一下

public class MyServletModule extends ServletModule {
  @Override protected void configureServlets() {
    serve("/com.my.module.name/dispatch")
      .with(GuiceStandardDispatchServlet.class);
  }
}
QU:我应该在我的应用程序的web.xml文件中添加什么才能正确执行演示者的操作,演示者已经注入了DispatcherAsync实现

QU:我应该把我的SqlSessionFactory提供方法放在哪里(在哪个模块中)才能在需要的地方注入SqlSessionFactory

注意,我在前面的代码片段中包含了一个新的SQLStuffModule;这将是放置SqlSessionFactory绑定的好地方。拥有多个模块没有什么害处,我发现它可以很好地将各种关注点分开

问:我如何实例化注入器,以便在其他操作处理程序中正确使用它

对于服务器端,请参阅上面的MyContextListener代码片段

在客户端,您需要一个定制的注入器接口,如下所示:

@Provides
    public SqlSessionFactory getSqlSessionFactory(){
        // some code here
    }
@GinModules(StandardDispatchModule.class, MyClientModule.class)
public interface MyGinjector extends Ginjector {
  MyWidgetMainPanel getMainPanel();
}
…您可以将MVP内容绑定到自定义Gin模块中,如下所示。很抱歉,我不熟悉mvp4g,但我假设您需要在模块类中将视图和演示者连接在一起

public class MyClientModule extends AbstractGinModule {
  @Override protected void configure() {
    bind(...).to(...);
    ...
  }
}

首先,我表示同情。把这一切放在一起,在任何一个地方都没有记录。我会依次回答你的每个问题。如果有任何不清楚的地方,请在我的回答中添加评论

QU:我应该如何编写DispatchServletModule以及如何使其运行(使用我应该提供的路径)

net.customware.gwt.dispatch.server.guice包中有一个GuiceStandardDispatchServlet类;用那个。我不能百分之百确定原因,但我使用的路径包括我的GWT模块的名称,后跟“/dispatch”。你可能得试一下

public class MyServletModule extends ServletModule {
  @Override protected void configureServlets() {
    serve("/com.my.module.name/dispatch")
      .with(GuiceStandardDispatchServlet.class);
  }
}
QU:我应该在我的应用程序的web.xml文件中添加什么才能正确执行演示者的操作,演示者已经注入了DispatcherAsync实现

QU:我应该把我的SqlSessionFactory提供方法放在哪里(在哪个模块中)才能在需要的地方注入SqlSessionFactory

注意,我在前面的代码片段中包含了一个新的SQLStuffModule;这将是放置SqlSessionFactory绑定的好地方。拥有多个模块没有什么害处,我发现它可以很好地将各种关注点分开

问:我如何实例化注入器,以便在其他操作处理程序中正确使用它

对于服务器端,请参阅上面的MyContextListener代码片段

在客户端,您需要一个定制的注入器接口,如下所示:

@Provides
    public SqlSessionFactory getSqlSessionFactory(){
        // some code here
    }
@GinModules(StandardDispatchModule.class, MyClientModule.class)
public interface MyGinjector extends Ginjector {
  MyWidgetMainPanel getMainPanel();
}
…您可以将MVP内容绑定到自定义Gin模块中,如下所示。很抱歉,我不熟悉mvp4g,但我假设您需要在模块类中将视图和演示者连接在一起

public class MyClientModule extends AbstractGinModule {
  @Override protected void configure() {
    bind(...).to(...);
    ...
  }
}
看起来像se