我有2个型号:ContactGroup和Contact。 ContactGroup包含许多联系人。
在页面中,我必须显示通讯组中的组列表和联系人数量,如下所示:
所以我在服务器端使用了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对象。
我不知道为什么GWT团队会设计不可变代理。所以请有人对requestfactory有经验请告诉我处理从服务器返回的ValueProxy的正确方法,以便我们可以使用它们进行渲染和编辑?
谢谢
答案 0 :(得分:1)
也许你应该尝试这样的事情:
ContactGroupContext ctx = requestFactory.newContactGroupContext();
LightContactGroupProxy editableProxy = ctx.edit(lightContactGroupProxy);
editableProxy.setName(newName);
ctx.saveInfoAndReturn(editableProxy).fire(receiver); // or just ctx.fire();
无论如何,我不会在这种情况下使用ValueProxy
,我会直接获得具有transiant属性ContactGroup
的{{1}}实体。如果您不希望每次请求contactCount
时计算该属性,则该属性可以是原始属性,也可以是ValueProxy
。