我在GWT页面上使用实体类可能是一个愚蠢的问题。据说要在GWT页面上显示一些类,必须在GWT客户端应用程序包中定义该类。例如。 com.foo.clinet下的GWT应用程序只能使用此包中定义的类及其子包显示在组件中(如GWT网格,标签......)
但是,如果您有其他项目,您已经定义了这些项目,通常是EJB(想象结构Web项目,ejb项目)。你可以通过RPC服务接收那些entites但是你不能在组件中使用它们(这个项目的简单添加jar不会有帮助)。第一种可能性是将它们转换为具有或多或少相同属性但在此Web项目中定义的其他值对象。但这是代码重复,这永远不会很好,因为只是当您更改实体时,您必须更改对应的视图值对象。如何自动完成这些事情肯定没有多少选择(例如通过反思很慢......)。
所以问题是,是否有一些典型的优雅解决方案或设计模式如何在没有代码重复的情况下解决这个问题?非常感谢
答案 0 :(得分:0)
将EJB放在单独的包/目录(例如com.example.common)中,然后将源声明添加到GWT模块描述符(xyz.gwt.xml):
<source path="common"/> //relative to your xyz.gwt.xml location
然后GWT编译器也会编译EJB,你的其他GWT代码也会看到它们。
使用超级源代码创建“假”EJB注释类。这是用GWT版本替换类的常用技术。这里描述:http://fredsa.allen-sauer.com/2009/04/1st-look-at-app-engine-using-jdo.html
答案 1 :(得分:0)
我可能找到了解决方案,但我不确定它是否正确。 我会更精确地指出我的问题。我有这个结构。
/MyApp/Ejb-module/x/y/z/MyClass.java
/MyApp/Web-module/x/y/MyApp.gwt.xml
并希望将MyClass.java
包含到 GWT 编译器 WITHOUT 需要将其移动到任何位置。
我刚刚定义了/MyApp/Ejb-module
版本还会包含*.java
个文件,然后在/MyApp/Web-module/a/b
我添加了Inclusion.gwt.xml,我放了
<module>
<source path="z" />
</module>
并使用
更新MyApp.gwt.xml
<inherits name="x.y.Inclusion"/>