【发布时间】:2014-01-28 10:53:06
【问题描述】:
我在从 ListEditor 编辑代理时遇到问题,如果编辑的代理刷新修改回 ListEditor有约束验证。
我有以下情况: 一个用户有一个或多个地址。举个更简单的例子,Address 对象有一个 ID 和一个 String 属性(表示正确的地址。
AddressProxy在以下几行中定义:
@ProxyFor(value = Address.class, locator = AddressLocator.class)
public interface AddressProxy extends EntityProxy {
public Long getId();
public void setId(Long id);
@NotNull(message = "The address must not be NULL.")
public String getAddress();
public void setAddress(String address);
}
所以我有一个 UserEditor (Editor),它有一个 ListEditor>
ListEditor 映射到 CellTable,表格后面有一个按钮,用于编辑地址列表中的某个地址。
如果我从列表中编辑地址,并且它有约束验证错误(我删除地址字符串),则 ListEditor 中的地址将使用错误值进行更新。
地址编辑器如下所示:
public class AddressEditor extends DialogBox implements LeafValueEditor<AddressProxy> {
...
public interface AddressEditorDriver extends RequestFactoryEditorDriver<AddressProxy, AddressEditor> {}
AddressEditorDriver driver = GWT.create(AddressEditorDriver .class);
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
private AddressProxy proxy;
...
public void edit(UserContext context, AddresProxy proxy) {
this.proxy = proxy;
driver.edit(proxy, context);
}
...
public void onSaveButtonClick() {
// this is where the original proxy it's updated
driver.flush();
Set<ConstraintViolation<AddressProxy>> constraints = validator.validate(proxy, Default.class);
if(constraints.size() != 0) {
Window.alert("Error encountered");
}
}
}
那么我做错了什么?如何从编辑器验证代理,而不将其刷新到原始代理?我怎样才能从驱动程序中刷新代理,只有在修改后的代理才有效?
【问题讨论】:
标签: gwt editor bean-validation requestfactory