为什么在GWT开发模式下无法从服务器端访问在客户端创建的对象?

时间:2014-04-06 10:52:10

标签: java java-ee gwt

我正在开发模式下运行GWT应用程序。在我的客户端代码(实现Entrypoint的类)中,我创建了一个对象并将其分配给另一个类的静态变量(假设为A类)。

现在,我可以通过从客户端的任何地方引用类A的静态变量来访问该对象,但是无法从服务器端代码访问它。任何人都可以解释我为什么无法访问该对象,就像我从客户端代码访问该对象一样在开发模式下同一JVM 上的同一会话范围内运行的客户端和服务器。< / p>

2 个答案:

答案 0 :(得分:3)

即使在开发模式下,您的客户端代码和服务器也未在一个JVM内运行。如您所知,GWT客户端代码已编译为Javascript代码。因此,更新一些静态字段最终会被编译为更新Javascript对象的一些属性。由于显而易见的原因,无法通过服务器端代码访问。

GWT中的开发模式非常智能,不允许混合服务器和客户端静态变量,以避免在将编译后的版本部署到服务器后出现混淆。

答案 1 :(得分:0)

  

您无法直接从服务器端类访问客户端类,反之亦然。

如果你想在客户端和服务器之间共享一些东西,那么使用共享包,但仍然用于特定目的,如常量,验证器,实用程序,DTO(数据传输对象)等。

不要在共享类中使用任何GWT UI特定代码。共享包对服务器也是可见的,并且您的自定义小部件没有任何意义。

请在此处阅读GWT MVP atchitecture

在此处详细了解GWT Architectural Perspectives


在共享包中创建对象,以便在客户端和服务器之间进行通信。

在客户端进行的任何更改都不会反映在服务器端是否存储在共享类中。您必须通过GWT RPC调用将值传递给服务器。