GWT - как реализовать методы RequestContext вне класса, аннотированного @Entity?

Возможно ли реализовать RequestContext методы вне аннотируемого класса @?

@Entity
class TheEntity {
  public static TheEntity theMethod() { ... } // don't want it here
}

@Service(TheEntity.class)
interface TheEntityRequest extends RequestContext {
  Request<TheEntity> theMethod(); // this one
}

1 ответ

Решение

Да, ты можешь. Это упоминается в официальной документации GWT, хотя и не очень подробно.

Мне очень помогло это сообщение в блоге Дэвида Чендлера.

Некоторые указатели:
(примеры ссылок взяты из проекта, обсуждаемого в сообщении в блоге)

Методы поиска сущностей (find, create, getId, getVersion) можно переместить в общий класс Locator ( пример). Чтобы это работало, ваши сущности должны расширить класс BasicEntity, который имеет getId а также getVersion методы. Затем на клиенте вы бы указали локатор следующим образом:

@ProxyFor(value = MyEntity.class, locator = GenericLocator.class)
public interface MyEntityProxy extends EntityProxy {
...
}


Методы доступа к данным могут быть перемещены в службу. Вы можете иметь общий сервис ( пример), а затем расширить его для каждой сущности, чтобы предоставить конкретные методы ( пример).

На клиенте вы определяете свой сервис следующим образом:

// MyEntityDao is your server service for MyEntity
@Service(value = MyEntityDao.class, locator = MyServiceLocator.class) 
interface MyEntityRequestContext extends RequestContext { 
Request<List<MyEntityProxy>> listAll();
Request<Void> save(MyEntityProxy entity);
... 
}

Обратите внимание на необходимость поиска службы также. Это может быть так просто, как это.

Другие вопросы по тегам