В GWT 2.1.1 свойства Id и Version могут быть любого типа, который RequestFactory знает, как транспортировать. В принципе, любой примитивный тип (int
), в штучной упаковке (Integer
) или любой объект, имеющий связанный с ним тип прокси. Вам не нужно сводить составной идентификатор к String самостоятельно; RF-сантехника может автоматически обрабатывать составные ключи, используя постоянный идентификатор ключа типа объекта или сериализованное состояние ключа типа значения.
Используя ранее размещенный пример:
interface Location {
public String getDepartment();
public String getDesk();
}
interface Employee {
public Location getId();
public int getVersion();
}
@ProxyFor(Location.class)
interface LocationProxy extends ValueProxy {
// ValueProxy means no requirement for getId()/getVersion()
String getDepartment();
String getDesk();
}
@ProxyFor(Employee.class)
interface EmployeeProxy extends EntityProxy {
// Use a composite type as an id key
LocationProxy getId();
// Version could also be a complex type
int getVersion();
}
Если вы не можете уменьшить личность одного getId()
собственности на типе домена, вы можете использовать Locator
, чтобы обеспечить внешне определенный идентификатор и версию имущество. Например:
@ProxyFor(value = Employee.class, locator = EmployeeLocator.class)
interface EmployeeProxy {.....}
class EmployeeLocator extends Locator<Employee, String> {
// There are several other methods to implement, too
String getId(Employee domainObject) { return domainObject.getDepartment() + " " + domainObject.getDesk(); }
}
DevGuide связан с вопросом немного устарели, в отношении RequestFactory changes in 2.1.1
Следует упоминалось, что композиционный ID * * должны быть отображены как ValueProxy (LocationProxy в код выше), и что прокси-сервер должен быть открыт где-то в прокси-серверах (т. е. доступен, когда вы идете по интерфейсам и методам, начиная с GWT.create() d RequestFactory, в приведенном выше примере кода он доступен из getId на EmployeeProxy). –
О, и BTW, версия не должна отображаться на прокси. –