在DTO上管理方法实现

时间:2014-01-27 09:58:07

标签: spring gwt dto

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

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

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

1 个答案:

答案 0 :(得分:1)

首先,如果您有这样的方法,那么您的对象不仅仅是DTO(by definition,DTO只有访问者和变异者)。

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

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