Вопрос

У меня есть несколько вопросов, касающихся GWT-Dispatch и Bearice. Я использую GWT-Dispatch 1.1.0, GWT-Dispatch 1.1.0, MVP4G 1.1.0 и джин 1.0

Прежде всего, я определил простое действие, результат и обработчик:

Listcontactsaction.java

public class ListContactsAction implements Action<ListContactsResult>{

    public ListContactsAction() {
    }

}

Listcontactsresult.java

public class ListContactsResult implements Result {

    private List<Contact> contactList;

    public ListContactsResult() {
    }

    public ListContactsResult(List<Contact> contactList) {
        this.contactList = contactList;
    }

    public List<Contact> getContactList() {
        return contactList;
    }
}

Listcontactshandler.java

public class ListContactsHandler implements ActionHandler<ListContactsAction, ListContactsResult>{

    @Inject
    private SqlSessionFactory factory;

    public Class<ListContactsAction> getActionType() {
        return ListContactsAction.class;
    }

    public ListContactsResult execute(ListContactsAction a, ExecutionContext ec) throws DispatchException {
        // some code using SqlSessionFactory and returning ListContactResult
        // with list of contacts
    }

    public void rollback(ListContactsAction a, ListContactsResult r, ExecutionContext ec) throws DispatchException {
        /* get action - no rollback needed */
    }

}

В предыдущей версии моего приложения, который использовал службу RPC вместо командования, у меня был метод, который обеспечил SqlSessionFactory Для инъекций, что-то вроде этого:

@Provides
    public SqlSessionFactory getSqlSessionFactory(){
        // some code here
    }

Я прочитал на GWT-Dispatch начать, что я должен обеспечить привязку между моим действием, и он обработчик, который должен выглядеть что-то подобное:

public class ContactModule extends ActionHandlerModule{
    @Override
    protected void configureHandlers() {
        bindHandler(ListContactsAction.class, ListContactsHandler.class);
    }
}

Но у меня есть проблемы с проводкой все это с республикой, потому что этот пример от сайта GWT-Dispatch:

public class DispatchServletModule extends ServletModule {
    @Override
    public void configureServlets() {
        serve( "/path/to/dispatch" ).with( DispatchServiceServlet.class );
    }
}

не работает, так как нет DispatchServiceServlet в пакете.

Мои вопросы:

  • Как я должен написать DispatchservletModule и как сделать его (с тем, что я должен обслуживать путь)
  • Что я должен поместить в файл Web.xml в моем приложении, чтобы иметь возможность правильно выполнять действия из моего ведущего, который вводится джин DispatcherAsync реализация
  • Где я должен положить свой SqlSessionFactory Обеспечение метода (в каком модуле) сможет вводить SQLSessionFactory, где мне это нужно
  • Как я создал инжектор, поэтому я могу использовать его в других обработчиках действий правильно

Я думаю, что это все, и я решил себя ясно. Если что-то недостаточно ясно, я постараюсь быть более конкретным.

Нет правильного решения

Другие советы

Вы создали класс GuiceVlevletConfig? Это то, где вы устанавливаете ваш модуль Servlet Dispatch, а также модуль обработчика действий с ущевием.

plubic class GuiceServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new HandlerModule(), new DispatchServletModule());
    }
}

HandleModule - это ваш класс модуля ActionHandler, так что из вашего кода вы поставьте свой класс контактаModule.

Для вашей SQLSessionFactory вы можете настроить привязку для него в вашем контактМодуле, с моим кодом у меня есть только один серверModule, который устанавливает все моих привязки моего обслуживания и обработчика действий. Это в основном для простоты.

GWT-Platform Framework использует вилку GWT-Dispatch для обработки запросов RPC. Есть много кода, который вы, вероятно, наверное пришлось вас, если вы думаете о серьезном использовании диспетчера и удивления. Я настоятельно рекомендую это.

Во-первых, я сочувствую. Положить это все вместе не документировано ни в одном месте. Я отвечу каждому из ваших вопросов в свою очередь. Добавьте комментарии к моему ответу, если кто-то из него неясен.

Qu: Как я должен написать DispatchservletModule и как сделать его (с тем, что я должен обслуживать путь)?

В пакете Net.Customware.gwt.dispatch.server.gwice есть класс GuicestandddispatchsEvlets использовать это. Я не на 100% уверен, почему, но используемый путь, включает имя моего модуля GWT, а затем «/ Dispatch». Возможно, вам придется экспериментировать с этим.

public class MyServletModule extends ServletModule {
  @Override protected void configureServlets() {
    serve("/com.my.module.name/dispatch")
      .with(GuiceStandardDispatchServlet.class);
  }
}

Qu: Что я должен поместить в файл Web.xml в моем приложении, чтобы иметь возможность правильно выполнять действия из моего ведущего, который имеет DispatcheraSync Джин впрыснул Dispatcherasync?

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>com.myapp.whatever.MyContextListener</listener-class>
  </listener>
  ...
</web-app>

... И тогда вам понадобится пользовательский слушатель контекста, который создает инжектор для говядины следующим образом. Обратите внимание, что я включил ваш контактModule, который связывает обработчики действий.

public class MyContextListener extends GuiceServletContextListener {
  @Override protected Injector getInjector() {
    return Guice.createInjector(new MyServletModule(), 
      new ContactModule(), new SQLStuffModule());
  }
}

Qu: Где я должен поставить свой метод предоставления SQLSessionFactory (в каком модуле) сможет ввести SQLSessionFactory, где мне это нужно?

Обратите внимание, что я включил новый SQLStuffModule в предыдущем фрагменте кода; Это было бы хорошим местом для привязки к SQLSessionSessionalactory. Там нет вреда, имея несколько модулей, и я обнаружил, что он сохраняет различные проблемы красиво разделенными.

Qu: Как я создал инжектор, поэтому я могу использовать его в других обработчиках действий?

Для Server-Side см. Фарпте кода MyContextListener выше.

На стороне клиента вам понадобится пользовательский интерфейс инжектора что-то вроде этого:

@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(...);
    ...
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top