这就是我现在这样做的方式:
try {
itemProxy.setQuantity(20);
} catch (IllegalStateException e){
itemProxy = context.edit(itemProxy);
table.replaceProxy(index, itemProxy);
itemProxy.setQuantity(20);
}
除了捕获异常之外还有其他方法吗?我知道代理具有“冻结”属性,因为我在Eclipse调试器中看到它。但我不能将代理转换为任何类或AutoBean接口来读取冻结属性的值。
答案 0 :(得分:2)
您可以尝试:
boolean frozen = com.google.web.bindery.autobean.shared.AutoBeanUtils.getAutoBean(itemProxy).isFrozen();
答案 1 :(得分:2)
如果edit()
已经被编辑(在同一个RequestContext
中),edit()
会返回代理,为什么不能无条件地{{1}}呢?
作为旁注,我不太明白在你不知道你的代理是否被编辑的情况下你会如何处理。这可能是问题的症结所在;异常应该仍然是一个例外情况(听起来好像很明显,但在GWT和JS中尤其如此),代码流不应该有“呃,好吧,我不知道我是什么状态在,所以让我们尝试“路径。
答案 2 :(得分:0)
一旦你在代理上调用编辑,那么只有它是可变的,否则它被冻结。要知道它是否冻结,你可以使用FLorent Bayle给出的答案
boolean frozen = com.google.web.bindery.autobean.shared.AutoBeanUtils.getAutoBean(itemProxy).isFrozen();