具有不可变ValueProxy属性的EntityProxies - > “无法找到二传手”

时间:2011-08-19 08:27:07

标签: gwt requestfactory

我正在试图围绕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");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

EntityProxy对象有一些方法可以很容易地在服务器上进行检索,因此在将对象发送回服务器时,只需要ID。另一方面,ValueProxy对象只能作为其所有子值的组合发送。将不可变值发送回服务器时,服务器代码不知道如何将代理转回服务器端值。

我会关注您的解决方案,即您可能无法在服务器上获得与客户端发送日期相同的日期。

相关问题