我正在试图围绕RequestFactory,但我遇到了一些问题。我有一个entityproxy,它有一个属性,它是一个不可变类型的值代理(joda-time LocalDate),我在服务器的任何调用中使用这个entityproxy都遇到了问题。
我通过在entityproxy中包含属性的getter,并且只包含valueproxy中的原始属性的getter来使该属性成为只读。
但是,据我所知,如果我在调用服务方法时使用entityproxy作为参数,那么任何引用的valueproxy都会自动标记为已编辑,其所有属性都包含在delta中?
这反过来导致ReflectiveServiceLayer抛出有关LocalDate上缺少的setter的异常。
我一直在想要实现一个ServiceLayerDecorator,它会覆盖“setProperty”以解决这个问题,但我不确定这是不是一个好的解决方案。有没有“正确”的方法来解决这个问题?理想情况下,我希望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");
}
}
}
答案 0 :(得分:1)
EntityProxy对象有一些方法可以很容易地在服务器上进行检索,因此在将对象发送回服务器时,只需要ID。另一方面,ValueProxy对象只能作为其所有子值的组合发送。将不可变值发送回服务器时,服务器代码不知道如何将代理转回服务器端值。
我会关注您的解决方案,即您可能无法在服务器上获得与客户端发送日期相同的日期。