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);
...
}
Обратите внимание на необходимость поиска службы также. Это может быть так просто, как это.