如何带来春天&;GWT在一起

如何带来春天&;GWT在一起,gwt,gwt-rpc,spring-roo,Gwt,Gwt Rpc,Spring Roo,我正在尝试开发一个SpringRoo/GWT应用程序,其中最新的GWT集成在Roo中 让脚手架工作起来非常简单,但我真的不明白RPC是如何工作的 你们中有人可以提供一个简单的例子,说明如何在SpringRoo和GWT中实现连接客户机/服务器的简单服务 这将是非常有帮助的开始,因为我找不到任何资源在这方面 thx和问候, Flo您所指的功能目前正在大力开发中(或者说谷歌的人希望我们相信),因此API和内部工作不是最终的,在GWT 2.1最终发布之前很可能仍会更改(在发布过程中曾多次声明)。但是,您

我正在尝试开发一个SpringRoo/GWT应用程序,其中最新的GWT集成在Roo中

让脚手架工作起来非常简单,但我真的不明白RPC是如何工作的

你们中有人可以提供一个简单的例子,说明如何在SpringRoo和GWT中实现连接客户机/服务器的简单服务

这将是非常有帮助的开始,因为我找不到任何资源在这方面

thx和问候,
Flo

您所指的功能目前正在大力开发中(或者说谷歌的人希望我们相信),因此API和内部工作不是最终的,在GWT 2.1最终发布之前很可能仍会更改(在发布过程中曾多次声明)。但是,您可以浏览主干中的,以查看一个工作(希望;))示例。还有一个似乎包含最新的(?)样本(以及谷歌IO上承诺的食谱)。
就我个人而言,我会等待将您的代码切换到新的RPC模型,直到从事GWT工作的人员说这样做是安全的;)(但现在习惯于总体思路肯定是个好主意——他们不会改变一切:D)。

Flo

不确定你是否在google wave上,但这似乎是一个与当前努力保持同步的地方。具体而言,这一浪潮可供公众使用:

它涵盖了关于RequestFactoryAPI的详细信息(不断涌现的详细信息)

基本思想是服务器端和客户端都需要域模型对象。使用hibernate可能会导致类文件出现问题,人们最终会拥有两组模型对象,并使用自定义GWT-RPC发出服务器请求,并在客户端和服务器端模型对象之间进行marshall/un marshall。这不是一个理想的解决方案。即使可以使用相同的模型对象,RPC的开销也是一个阻力

进入RequestFactory,我们看到谷歌工程师很可能得到了他们应得的报酬。看一看从.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(…):

com.springsource.extrack.gwt.request
包中,您将看到一个ApplicationEntityTypesProcessor.java,它巧妙地使用泛型来打包对域类的引用,以便稍后在演示中使用。不过,该包的其余部分是每个模型对象的事件和处理程序

具体来说,每个对象有四个自动生成的类:

  • java-这是域对象的DTO
  • java-这是一个RecordChanged事件,用于提供onEmployeeChanged的钩子方法
  • EmployeeChangedHandler.java-这是一个接口,当需要OneEmployeeChanged的特定行为时,将实现该接口
  • 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了解更多信息。加上expenses.roo演示了如何使用位置,并且有一个相当灵活的活动框架。祝你快乐

问候

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);
}