ConfigProperty.idPropertyMap
。 (通过日志输出验证)
在客户端访问它显示它是空的。 :-((通过日志输出验证)
这是一些默认行为吗? (我不这么认为)
该问题可能与内部类ConfigProperty.IdPropertyMap
,java.util.HashMap
用法,序列化或某些字段访问修饰符问题有关吗?
感谢您的帮助
// the transfer object public class ConfigProperty implements IsSerializable, Comparable { ... static public class IdPropertyMap extends HashMap implements IsSerializable { ... } protected static IdPropertyMap idPropertyMap = new IdPropertyMap(); ... } // the server service public class ManagerServiceImpl extends RemoteServiceServlet implements ManagerService { ... public IdPropertyMap getConfigProps(String timeToken) throws ConfiguratorException { ... } }
在得到一些好的答案之后从下面添加(谢谢!):
回答底线:当前未实现/支持静态字段同步。某人/我必须提交功能请求
只是我的观点(对于GWT来说是一个堕落的新人: - )):
我理解非常好(不完美!;-))“全局”变量同步的可能含义(依赖图或注释的使用可能是有用的)。 但是从一个新的(经验丰富的Java EE / web)用户看来是这样的:
您创建了一些myapp.shared.dto.MyClass
类(dto =数据传输对象)
你在其中添加一些静态字段,只代表那些对象的集合(可能还有其他一些DTO)
您也可以在客户端执行此操作,所有其他静态方法也可以使用
唯一不起作用的是同步(首先不是太糟糕)
但是:有些提供了注释,让我们说@Transfer static Collection<MyClass> myObjList;
会很方便,因为我似乎知道这会带来的影响和好处。
在我的情况下,它相当简单,因为客户端更加静态,但是如果GWT框架可以做到这一点,我希望没有明确地实现它。
答案 0 :(得分:2)
RPC的想法并不是说您可以像客户端和服务器完全相同的JVM一样,但它们可以共享您通过网络传递的对象。要通过线路发送静态字段,从服务器到客户端,必须从RPC方法返回存储在该字段中的对象。
静态属性不是通过网络序列化和发送的,因为它们不属于单个对象,而属于类本身。
public class MyData implements Serializable {
protected String name;//sent over the wire, each MyData has its own name
protected String key;
protected static String masterKey;//All objects on the server or client
// share this, it cannot be sent over RPC. Instead, another RPC method
// could access it
}
但请注意,只有一个将被共享的实例 - 如果服务器上的其他内容更改了该字段,则需要更新所有要求副本的客户端
答案 1 :(得分:1)
静态变量纯粹是类变量它与单个实例无关。序列化仅适用于对象。
因此,您将始终清空ConfigProperty.idPropertyMap