2012-03-30 56 views
0

我有GWT编译器的问题。当我添加下一个方法,我的实体类:GWT和ReflectionToStringBuilder.toString()

@Override 
public String toString() { 
    return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); 
} 

编译器给了我一个错误:

ERROR: Deferred binding failed for 'com.mvp4g.client.Mvp4gModule'; expect subsequent failures 
ERROR: Unable to load module entry point class plaut.wimc.avl.admin.client.Admin (see associated exception for details) 
java.lang.RuntimeException: Deferred binding failed for 'com.mvp4g.client.Mvp4gModule' (did you forget to inherit a required module?) 

当我删除它,一切工作正常。我不明白为什么给我编译器这样的错误。这个toString方法也用于roo IDT的方法,并且没有这样的错误。

回答

1

客户端使用的所有Java代码都需要能够编译为JavaScript。 ReflectionToStringBuilder使用JavaScript中不可用的反射,因此此方法不能用于您的客户端代码。

此编译错误是指所有Java代码都必须由GWT共享程序通过GWT模块文件中的path参数访问,并且必须以源格式提供。在这种情况下,没有GWT模块文件存在,因此错误,因为编译器无法找到ReflectionToStringBuilder方法的来源。虽然您可以为此特定案例创建这样的文件并添加源代码,但由于反射不起作用,所以它不起作用。

+0

好吧,我明白了,但它是如何可能的,在roo生成的项目,这是可行的?你认为aspectJ编译器翻译这个函数吗? – user1289877 2012-03-31 09:35:19

+0

这个类只能在服务器端代码中使用吗?这将工作。 – 2012-03-31 10:02:59

0

看起来问题在于ReflectionToStringBuilder。它是一个GWT模块吗?如果是,则需要在项目的* .gwt.xml中添加一个继承模块

+0

不,它不是GWT模块,它的apache神器:org.apache.common:commons-lang3 – user1289877 2012-03-30 13:46:27

+1

@ user1289877请阅读https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsClient(很第一段,特别是最后一句) – 2012-03-30 13:50:29

+0

我认为你不能在GWT中使用commons-lang。有gwt-commons-lang(http://code.google.com/p/gwt-commons-lang/)项目。但我没有看到它内部的任何活动。另外,Google群组中有一个旧帖子(http://groups.google.com/group/Google-Web-Toolkit/msg/dead7dd8032aae1f?pli=1),它表示您不能在GWT项目中使用commons-lang for客户端。 – 2012-03-30 13:50:32