我正试图将我的思想围绕 RequestFactory,但我遇到了一些问题。我有一个实体代理,它的属性是不可变类型的值代理(joda-time LocalDate),并且在对服务器的任何调用中使用此实体代理时遇到问题。
我通过仅在实体代理中包含属性的 getter,并且仅在 valueproxy 中包含原始属性的 getter,使该属性成为只读的。
但是,据我所知,如果我在调用服务方法时使用实体代理作为参数,任何引用的 valueproxy 都会自动标记为已编辑,并且其所有属性都包含在增量中?
这反过来又会导致 ReflectiveServiceLayer 在 LocalDate 上抛出一个关于缺少 setter 的异常。
我一直在考虑实现一个覆盖“setProperty”的ServiceLayerDecorator来解决这个问题,但我不确定这是否是一个好的解决方案。有没有“正确”的方法来解决这个问题?理想情况下,我希望 AbstractRequestContext 不要在对服务器的调用中包含不可变属性。
我正在使用 GWT 2.3
编辑:我创建了这样的解决方法,但我仍然不确定这是否是正确的方法:
public class ImmutablePropertyFixServiceLayer extends ServiceLayerDecorator {
@Override
public void setProperty(Object domainObject, String property, Class<?> expectedType, Object value) {
Method setter = getTop().getSetter(domainObject.getClass(), property);
if (setter != null) {
super.setProperty(domainObject, property, expectedType, value);
} else {
//System.out.println(domainObject.getClass().getName() + "." + property + " doesn't have a setter");
}
}
}