GWT客户端和同一类的服务器实现

hel*_*t50 9 gwt client rpc

有没有办法在客户端与服务器上实现不同的类?

为了避免"为什么你想这样做?" 问题..我会详细说明

我正在转换一个非常大的Java客户端/服务器应用程序.目前它使用Swing GUI客户端并通过Spring远程处理(RPC)与服务器通信.使用GWT RPC和Spring服务不是问题,有几个很好的例子可供使用,而且一切似乎都运行良好.

客户端和服务器共有的几个类包含来回传递的数据.这些类还包含一些使用标准JRE类实现的行为.例如,一个类以特定于语言环境的方式包含,解析和格式化日期和时间,包括时区,DST等.我可以重写/重构它,但是应用程序超过1000万SLOC,因此只有数百万个引用这个类,所以重大改写不符合成本效益.

以此为例,GWT为解析和格式化日期提供了出色的i18n支持.但实施方式与JRE的实施方式不同.

所以我正在寻找一种切割方式,我可以将实现注入到我的DateTime类的shell中,具体取决于它是在客户端(使用GWT和本机JS)还是在服务器(使用JRE)中.有一种巧妙的方法吗?也许使用模块文件XXXXX.gwt.xml.我正在寻找通用的解决方案.

Tho*_*yer 5

您希望使用<super-source>for overriding one package实现与另一个.这是GWT用来模拟Java Runtime类的,以及(除其他外)为com.google.gwt.regexp.shared.*类的客户端和服务器提供不同的实现.


jjc*_*pek 0

我认为您正在寻找的是:<source path="client" />在您的项目 gwt.xml 文件中。它告诉 GWT 生成器在哪里寻找客户端代码以转换为 JS。在我的项目中我是这样设置的:

<source path="client" />
<source path="shared" />
Run Code Online (Sandbox Code Playgroud)

基本上,客户端代码位于客户端目录中,在共享目录中,我们为客户端和服务器端保留 bean 和一些数据包装器。

您可以做的就是使用上面的源路径将要转换的包添加到客户端。但您必须记住,您要转换的类只能由 GWT 生成器可以转换为客户端 java 脚本的对象和属性组成。我也不确定是否可以在源路径中放入更准确的路径,例如:

<source path="shared/beans/whatever" />
Run Code Online (Sandbox Code Playgroud)

另一个缺点是,如果您使用 GWT i18n 支持,它会在编译时自行处理不同的语言环境 - 这很好。如果您决定使用自己的机制,您的类必须包含一些逻辑来了解当前使用的语言环境,这些逻辑必须与 GWT 兼容。