GWT“共享”对象继承/转换器的替代品

Posted

技术标签:

【中文标题】GWT“共享”对象继承/转换器的替代品【英文标题】:GWT "shared" objects inheritance / alternative to converters 【发布时间】:2014-08-08 10:00:20 【问题描述】:

在 GWT 应用程序中,我们有一个“共享”包,顾名思义,它包含在客户端和服务器端代码之间共享的对象。 我们有一个多模块 maven 项目:

+ server
|  |
|  + businessLogicPackage
|
+ gwt
   |
   + client
   |
   + server
   |    |
   |    + converter
   |    |
   |    + rpc
   |
   + shared 

每次我需要在服务器模块中重用共享对象时,我都需要使用位于 gwt/server/converter 中的某个转换器来转换共享对象。 我尝试使用继承并让共享对象从服务器/businessLogicPackage 继承类,以为我可以通过简单的强制转换操作摆脱困境。这会产生错误。显然 GWT 无法编译来自外部模块的源代码。

> No source code is available for type server.businessLogicPackage.x; did you forget to inherit a required module ?

知道:

我们正在处理大量“共享”对象 我希望我的业务逻辑保留在一个单独的模块中,以便我可以在其他地方重用它 我不想写所有这些转换器

谁能与我分享一些最佳实践/替代方案? 2014年现在流行什么?

【问题讨论】:

【参考方案1】:

您的问题是使用 gwt 模块中的类和服务器模块中的共享包而不需要手动转换?

您可以简单地创建一个名为 shared 的第三个模块,例如它包含 gwt 客户端和服务器模块使用的类。

gwt 和服务器模块依赖于这个新的共享模块。 为了让 GWT 能够访问源代码,您将 MySharedModuleName.gwt.xml 添加到新模块并将其包添加为源代码。在您的 GWT 模块中,为 MySharedModuleName 添加一个继承标签。

然后,GWT 需要访问源。如果你创建它,你可以在你的 gwt 模块 pom 中添加对源 jar 的依赖:<classifier>sources</classifier>。或者在您的共享模块中添加目标 gwt:resources 以包含 jar 中的源代码。

【讨论】:

【参考方案2】:

最后我将源代码添加到已编译的 jar 中,因此只需向 POM 添加一个依赖项(没有分类器)就足够了。我的 GWT 模块继承自 Nicolas Morel 提出的“共享”maven 模块的 GWT 模块。

    <build>
        <resources>
            <resource>
                <directory>$project.build.sourceDirectory</directory>
            </resource>
            <resource>
                <directory>$basedir/src/main/resources</directory>
            </resource>
        </resources>
    </build>

【讨论】:

以上是关于GWT“共享”对象继承/转换器的替代品的主要内容,如果未能解决你的问题,请参考以下文章

GWT(客户端)=如何将对象转换为 JSON 并发送到服务器?

在共享包中使用 GWT 的 NumberFormat 类

GWT JsType数组转换

如何在 GWT 中使用 autobean 将 json 转换为 java 类

在 GWT 中将字符串转换为可拆分表

在 GWT 中从 JsArray<JavaScriptObject> 转换为 List<JSONObject>