2010-07-19 31 views
3

我正在尝试在Roo中开发一个GWT最新的GWT应用程序。如何将Spring Roo和GWT结合在一起

让脚手架工作非常简单,但我不太了解RPC如何在此工作。

有人可以提供一个简单的例子,说明如何做一个简单的服务来连接Spring Roo和GWT中的客户端/服务器。

对于一开始是非常有帮助的,因为我找不到任何资源。

THX &问候, 弗洛

回答

0

你指的是该功能目前仍处于开发状态(左右在谷歌的人希望我们相信;))这样的API和内部工作是不是最终版本,将在GWT 2.1的最终版本发布之前很可能仍会发生变化(在Google IO 2010期间的GWT sessions期间曾多次声明)。但是,您可以浏览中继线中的Bikeshed sample以查看工作(希望;))示例。还有一些2.1 branch似乎包含最新的(?)示例(以及Google IO上承诺的食谱)。个人而言,我会等待将代码切换到新的RPC模型,直到工作在GWT上的人说这样做是安全的;)(但是现在习惯使用一般想法绝对是一个好主意 - 它不是他们将改变的一切:D)。

7

弗洛,

不知道,如果你在谷歌波浪可言,但这似乎是一个地方,以保持当前努力的快速增长。具体来说,这一波向公众开放: RequestFactory Wave

它涵盖了关于RequestFactory API的详细信息(以及新出现的细节)。

其基本思想是您的域模型对象在服务器端和客户端都需要。使用hibernate可能会导致类文件出现问题,并且人们最终得到了两组模型对象,并使用自定义GWT-RPC在客户端和服务器端模型对象之间创建服务器请求和编组/非编组。不是理想的解决方案。即使您可以使用相同的模型对象,RPC的开销也是一种拖动。

输入RequestFactory,我们看到Google的工程师可能获得了他们的价值。看看.roo生成的示例代码 - 特别是ApplicationRequestFactory.java。

package com.springsource.extrack.gwt.request; 

import com.google.gwt.requestfactory.shared.RequestFactory; 

public interface ApplicationRequestFactory extends RequestFactory { 
    ReportRequest reportRequest(); 
    ExpenseRequest expenseRequest(); 
    EmployeeRequest employeeRequest(); 
} 

这是一个为每个域对象提供请求方法的接口。项目中没有定义这个类的实现。它被实例化在与入口点到GWT.create调用(...):

final ApplicationRequestFactory requestFactory = 
    GWT.create(ApplicationRequestFactory.class); 
requestFactory.init(eventBus); 

com.springsource.extrack.gwt.request包,你会看到一个ApplicationEntityTypesProcessor.java这是巧妙地使用泛型打包域类的引用供以后在演示中使用。该包的其余部分虽然是每个模型对象的事件和处理程序。

具体地有对每个对象4自动生成的类:

  • EmployeeRecord.java - 这是域对象DTO。
  • EmployeeRecordChanged.java - 这是一个RecordChanged事件,它在onEmployeeChanged上提供一个钩子方法。
  • EmployeeChangedHandler.java - 这是一个当需要onEmployeeChanged的特定行为时将实现的接口。
  • EmployeeRequest.java - 这是ApplicationRequestFactory用来打包给定对象的各种访问方法的接口。

请记住,幕后生成了很多代码来支持所有这些。从M1到M2,很多已经被清除了GWT项目中可见的内容。我预计会有更多的变化,但不会像M1到M2那样激烈。

因此,最终这些事件可以在UI包中使用,以将域和UI绑定在一起。 ReportListActivity.java:

public void start(Display display) { 
    this.registration = eventBus.addHandler(ReportRecordChanged.TYPE, new ReportChangedHandler() { 
     public void onReportChanged(ReportRecordChanged event) { 
      update(event.getWriteOperation(), event.getRecord()); 
     } 
    }); 
    super.start(display); 
} 

我再次向您介绍wave了解更多信息。此外,这些费用.roo演示了如何使用Places,并且还有一个相当漂亮的Activity框架。快乐的GWTing。

问候。