0

我正试图将我的思想围绕 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");
        }
    }
}
4

1 回答 1

1

EntityProxy 对象可以通过某种方式在服务器上轻松检索,因此在将对象发送回服务器时,只需要 ID。另一方面,ValueProxy 对象只能作为其所有子值的组合发送。将不可变值发送回服务器时,服务器代码不知道如何将代理转回服务器端值。

我会担心您的解决方案,您可能无法在服务器上正确获取与客户端发送的日期相同的日期。

于 2011-11-08T16:08:51.213 回答