Как отредактировать значение ValueProxy gwt requestfactory на стороне клиента?
У меня есть 2 модели: ContactGroup и Contact. ContactGroup содержит много контактов.
На странице мне нужно отобразить список групп и количество контактов в группе корреспонденции следующим образом:
- Группа Foo (12 контактов)
- Групповой бар (20 контактов)
Так что я на стороне сервера я использовал DTO ContactGroupInfo:
public class ContactGroupInfo {
private Integer contactCount;
private Long id;
private String name;
public Integer getContactCount() { return this.contactCount; }
public Long getId() { return this.id; }
public String getName() { return this.name; }
public void setContactCount(Integer count) { this.contactCount = count; }
public void setId(Long id) { this.id = id; }
public void setName(String name) { this.name = name; }
}
В этом ContactGroupInfo я добавил поле contactCount, которое не является полем в сущности ContactGroup.
А на стороне клиента я использовал ValueProxy:
@ProxyFor(value = ContactGroupInfo.class, locator = ContactGroupService.class)
public interface LightContactGroupProxy extends ValueProxy {
Integer getContactCount();
Long getId();
String getName();
void setContactCount(Integer count);
void setId(Long id);
void setName(String name);
}
Поэтому, когда серверная сторона возвращает клиентской стороне список LightContactGroupProxy, я сохранял этот список в ArrayList для отображения в CellTable.
И тут возникает проблема: когда мне нужно отредактировать имя группы на стороне клиента, я не могу редактировать объект LightContactGroupProxy напрямую.
- Поэтому я должен отправить новое имя на сервер, чтобы вернуть новый LightContactGroupProxy с новым именем. Это неэффективно, потому что мне приходится снова считать контакты (хотя я знаю, что количество контактов не меняется).
- Или я должен отправить количество контактов и новое имя на сервер, чтобы создать новый LightContactGroupProxy с новым именем. Это не я хочу, потому что, если LightContactGroupProxy имеет много других полей, я должен отправить много полей.
Я не знаю, почему команды GWT проектируют неизменный прокси. Так что, пожалуйста, у кого-то есть опыт в запросе. Пожалуйста, покажите мне правильный способ обработки ValueProxy, возвращенного с сервера, чтобы мы могли использовать их для рендеринга и редактирования?
Спасибо
1 ответ
Может быть, вы должны попробовать что-то вроде этого:
ContactGroupContext ctx = requestFactory.newContactGroupContext();
LightContactGroupProxy editableProxy = ctx.edit(lightContactGroupProxy);
editableProxy.setName(newName);
ctx.saveInfoAndReturn(editableProxy).fire(receiver); // or just ctx.fire();
Во всяком случае, я бы не стал использовать ValueProxy
в этом случае я бы получил ContactGroup
лица с транзитной собственностью contactCount
, Свойство может быть примитивным или ValueProxy
если вы не хотите, чтобы он рассчитывался каждый раз ContactGroup
запрашивается.