2010-11-25 36 views
0

我在GWT页面上使用实体类可能是一个愚蠢的问题。据说要在GWT页面上显示一些类,这个类必须在GWT客户端应用程序包中定义。例如。在com.foo.clinet下的GWT应用程序只能使用此包中定义的类及其子包中显示的组件(如GWT网格,标签...)使用来自EJB的实体的GWT

但是如果您有其他项目定义了这些实体,通常是EJB(想象结构web项目,ejb项目)。您可以通过RPC服务接收这些实体,但是不能在组件中使用它们(简单地添加此项目的jar不会有帮助)。第一种可能性是将它们转换为具有或多或少相同属性但在此Web项目中定义的其他值对象。但是这是代码重复,从来都不好,因为当你改变实体时,你必须改变相应的视图值对象。当然,很少有选择自动做这些事情(例如,通过可悲的慢反射......)。

所以问题是,有没有一些典型的优雅的解决方案或设计模式如何解决这个没有代码重复?非常感谢

回答

0

我可能找到的解决方案,但我不知道如果它是正确的。 我会指出我的问题更精确一点。我有这个结构。

/MyApp/Ejb-module/x/y/z/MyClass.java 
/MyApp/Web-module/x/y/MyApp.gwt.xml 

,并希望包括MyClass.javaGWT编译需要任何地方移动。

我只是定义了/MyApp/Ejb-module版本将包括也*.java文件,然后在/MyApp/Web-module/a/b我addded Inclusion.gwt.xml这里我把

<module> 
    <source path="z" /> 
</module> 

<inherits name="x.y.Inclusion"/> 
0
  1. 把你的EJB在一个单独的封装/目录(如com.example.common),然后添加源声明你的GWT模块描述符(xyz.gwt.xml):

    <source path="common"/> //relative to your xyz.gwt.xml location 
    

    然后GWT编译器也会编译EJB,它们会被其他GWT代码看到。

  2. 使用超级采购创建“假”EJB注释类。这是用GWT版本替换类的常用技术。这里描述:http://fredsa.allen-sauer.com/2009/04/1st-look-at-app-engine-using-jdo.html

+0

,我将有一个更新MyApp.gwt.xml看看吧 – glu 2010-11-25 15:33:10