【问题标题】:Managing method implementations on DTO's管理 DTO 上的方法实现
【发布时间】:2014-01-27 09:58:06
【问题描述】:

我正在寻找在 DTO 上编写方法的优雅解决方案

问题源于 DTO 上的方法可以在客户端和服务器端使用。当您使用任何客户端或服务器端特定方法时,随后会出现问题。这通常会导致 java.lang.NoClassDefFoundError 异常。

我目前从事的项目使用 GWT 和 spring。我在尝试格式化 DTO 上的日期时遇到了这个问题。调用 GWT.create(GlobalConstants.class) 时,格式方法抛出 java.lang.NoClassDefFoundError。我正在寻找一种优雅的方法来区分是从服务器端还是客户端调用方法,并相应地调整方法的实现。

【问题讨论】:

    标签: spring gwt dto


    【解决方案1】:

    首先,如果你有这样的方法,那么你的对象就不仅仅是一个 DTO(by definition,一个 DTO 只有访问器和修改器)。

    话虽如此,有几种方法可以解决您的对象问题。

    • 要解决NoClassDefFoundError,请使用com.google.gwt.core.shared.GWT 代替 com.google.gwt.core.client.GWTshared 类存在于gwt-user.jargwt-servlet.jar 中。
    • 您可以使用GWT.isClient() 来判断您是在客户端还是服务器端,并跳转到相应的代码。
    • 从 GWT 2.6 开始,GWT.create() 可以在 GWT 客户端上下文之外使用,因此 你可以让它在服务器端工作(你必须提供你自己的ClassInstantiatorcom.google.gwt.core.server.ServerGwtBridge.getInstance()#register()
    • 如果从 GWT 2.6 开始,您有一个特定于服务器端的方法甚至不会转译为 JavaScript,您可以使用 @GwtIncompatible 对其进行注释(任何此类注释都可以使用,包无关紧要,只有注解名称),GWT 将就好像它根本不存在一样。
    • 最后,当上述方法都不起作用时,您可以将您的代码“分叉”成super-source,以便提供不同的特定于服务器和特定于客户端的实现。请参阅the GWT documentation 中的“用另一个包实现覆盖”。

    【讨论】:

    • 嗨,托马斯!感谢您真正有见地的回答!
    猜你喜欢
    • 2019-03-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多